我正在尝试为我创建的程序包编写包装器
我具有以下python包结构:
package1
|--__init__.py (blank)
|--module1.py
|--module2.py
|--module3.py
package2
|--module4.py
import module2
from module3 import *
def main():
# Do some stuff
module2.doSomeModule2Stuff()
if __name__ == "__main__":
main()
import package1
def main():
package1.module1.main()
我使用package1
在本地安装了python -m pip install -e package1
,因此可以将其导入package2
当我运行python module1.py
(在package1
目录中)时,它运行正常,没有问题。
运行python module4.py
(在package2
目录中)时,我得到:
Traceback (most recent call last):
File "module4.py", line 3, in <module>
package1.module1.main()
AttributeError: module 'package1' has no attribute 'module1'
我需要在package1
中进行哪些更改才能以这种方式在package2
中使用它?
将import package1
更改为import package1.module1
会导致以下错误
Traceback (most recent call last):
File "module4.py", line 1, in <module>
import package1.module1
File "/home/ben/Documents/package1/package1/module1.py", line 1, in <module>
import module2
ImportError: No module named 'module2'
答案 0 :(得分:3)
导入软件包并不会自动导入其所有子模块,因此import package1
不一定足以访问package1.module1
。试试:
import package1.module1
您也可以这样做:
from package1 import module1
def main():
module1.main()
或
from package1.module1 import main
def my_main(): # names of mains must be different
main()