Python : import module once for a whole package

匿名 (未验证) 提交于 2019-12-03 07:50:05

问题:

I'm currently coding an app which is basically structured that way :

main.py
+ Package1
+--- Class1.py
+--- Apps
+ Package2
+--- Class1.py
+--- Apps

So I have two questions : First, inside both packages, there are modules needed by all Apps, eg : re. Is there a way I can import a module for the whole package at once, instead of importing it in every file that needs it ?

And, as you can see, Class1 is used in both packages. Is there a good way to share it between both packages to avoid code duplication ?

回答1:

I would strongly recommend against doing this: by separating the imports from the module that uses the functionality, you make it more difficult to track dependencies between modules.

If you really want to do it though, one option would be to create a new module called common_imports (for example) and have it do the imports you are after.

Then in your other modules, add the following:

from common_imports import * 

This should give you all the public names from that module (including all the imports).



回答2:

To answer your second question, if your two modules named Class1.py are in fact the same, then you should not copy it to both packages. Place it in a package which will contain only code which is common to both, and then import it. It is absolutely not necessary to copy the file and try to maintain each change in both copies.



回答3:

Q1:
You Must find a way to import your package, thus you have two choices:
(Please correct me if I'm wrong or not thorough)

1. Look at James' solution, which you need to define a class, put all the modules inside and finally import them to your Sub-classes

2. Basically import nothing to your Main class, but instead, import only once to your Sub-classes

For example:(inside A_1 subclass) import re
def functionThatUseRe(input): pass

Then inside your main class, just do try: from YourPackage import A_1 #windows except: import A_1 #MAC OSX
A_1.functionThatUseRe("")

And you completely avoided importing modules multiple times

Q2: put your class1.py in the same directory with your main class, or move it to another folder, in Package1(&2).Apps

import Class1 

Start using the code from there



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!