Python 模块在 运行 单独时表现良好,但在作为包装器的一部分导入时表现不佳
Python module behaves when run alone, but not when imported as part of a wrapper
我正在尝试围绕我创建的包编写一个包装器
我有以下 python 包结构:
package1
|--__init__.py (blank)
|--module1.py
|--module2.py
|--module3.py
package2
|--module4.py
package1.module1:
import module2
from module3 import *
def main():
# Do some stuff
module2.doSomeModule2Stuff()
if __name__ == "__main__":
main()
package2.module4:
import package1
def main():
package1.module1.main()
我使用 python -m pip install -e package1
在本地安装了 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
中使用它?
编辑 1
将 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'
导入包不会自动导入其所有子模块,因此 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()
我正在尝试围绕我创建的包编写一个包装器
我有以下 python 包结构:
package1
|--__init__.py (blank)
|--module1.py
|--module2.py
|--module3.py
package2
|--module4.py
package1.module1:
import module2
from module3 import *
def main():
# Do some stuff
module2.doSomeModule2Stuff()
if __name__ == "__main__":
main()
package2.module4:
import package1
def main():
package1.module1.main()
我使用 python -m pip install -e package1
在本地安装了 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
中使用它?
编辑 1
将 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'
导入包不会自动导入其所有子模块,因此 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()