我正在尝试用Python创建一个包,其中包含许多子包(我不确定它们是否适合它们)需要互操作。
我有一个(简化的)结构:
/package
|-script1.py
|-script2.py
|-subpackage1
| |-__init__.py
| |-src
| | |-__init__.py
| | |-my_program.py
| | |-functions.py
| | |-...
|
|-tests
| |-a_tests.py
|-subpackage2
| |-web-server.py
| |-API
| | |-__init__.py
| | |-REST.py
| | |-...
package/subpackage2
需要能够致电package/subpackage1/src/functions.py
package/tests
调用两个子包(使用pytests
)。package/subpackage1/src/functions.py
需要能够调用subpackage1
我已经看到了这个答案:https://stackoverflow.com/a/33195094 - 这解释了我需要做什么(创建一个包),但它并没有解释如何这样做
我可以很容易地使用以下两个scripts
调用其组件子包:
import subpackage1.src.my_program.py
(即类似于建议here)但随后my_program.py
失败并显示ImportError: No module named 'functions'
那么,我需要用什么胶水来设置这个结构呢?
答案 0 :(得分:4)
如果您要将functions.py
中的内容导入my_program.py
,那么在my_program.py
中,您必须指定绝对导入路径。
让我们说functions.py
包含以下功能:
def function1():
print('foo bar')
然后,要将function1
从functions.py
导入my_program.py
,其内容应如下所示:
from subpackage1.src.functions import function1
function1()
答案 1 :(得分:3)
所以要解决这个问题我创建了一个类似的文件夹结构
/package
|-script1.py
|-subpackage1
| |-__init__.py
| |-src
| | |-__init__.py
| | |-functions.py
我的script1.py文件有
import subpackage1
import subpackage1.src
import subpackage1.src.functions as f
print(f.hello())
我的functions.py
文件有
def hello():
return "from the functions"
现在来自package
文件夹
我做了
$ python script1.py
脚本运行并输出
from the functions
显示。
我正在使用python3
所以我错过了一些东西,因为它在我的系统上工作。
注意:我添加了三个不同的imports
来检查那里的导入错误。
答案 2 :(得分:1)
在import subpackage1.src.functions as f
my_program.py
运行模块时,请站在package
文件夹中,然后运行如下:
python -m subpackage1.src.my_program