在Python中创建一个包含多个子包的包
我想在Python中创建一个包含多个需要互操作的子包(我不确定这是否合适)。在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
需要能够(使用pytests
)来调用package/subpackage1/src/functions.py
-
package/tests
电话都子包。 -
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'
所以,我需要用什么胶水来设置这个结构?
所以解决这个问题,我创建了一个类似的文件夹结构
/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
来检查那里的导入错误。
如果你想从functions.py
导入my_program.py
然后在my_program.py
你必须指定绝对导入路径。
假设functions.py
包含以下功能:
def function1():
print('foo bar')
然后,从functions.py
导入function1
为my_program.py
其内容应该是这样的:
from subpackage1.src.functions import function1
function1()
在my_program.py
添加import subpackage1.src.functions as f
当你运行模块时,站在package
文件夹并运行如下:
python -m subpackage1.src.my_program
的'subpackage1'必须具有'__init __ py'是检测为模块。你在'src'中加了'__init __。py',但没有在'subpackage1'中。 –
@GIRISHRAMNANI - 谢谢。我间歇地有一个在那里,但不知道是否有必要。在那里有一个似乎没有改变任何东西;所以需要其他一些东西来...... –