Mic*_*tuh 6 python python-import python-3.x
我有一个简单的项目结构,其中大部分是空的 python 文件,以便测试在线教程中的概念:
project
|--package1
| |--__init__.py
| |--module1.py
|
|--package2
| |--__init__.py
| |--module2.py
|
|--__init__.py
Run Code Online (Sandbox Code Playgroud)
模块1.py:
from .package2.module2 import function2
Run Code Online (Sandbox Code Playgroud)
模块2.py:
def function2():
return 0
Run Code Online (Sandbox Code Playgroud)
直接运行 module1.py 会出现此错误:
Traceback (most recent call last):
File "c:\"blahblahblah"\project\package1\module1.py", line 1, in <module>
from .package2.module2 import function2
ImportError: attempted relative import with no known parent package
Run Code Online (Sandbox Code Playgroud)
我尝试通过将 module2.py 放入项目文件夹本身并修改导入来降低问题的复杂性,因为我的教程建议它可以工作(来自 .module2 import function2),但这会产生相同的错误。
旁注:我的印象是 init 文件对于我的 python 版本来说是不必要的,但我添加了它们以覆盖我的所有基础。
Python版本3.9.1
任何提示将不胜感激。
您可以将外部包的路径加入到源路径中以进行相对模块导入:
import os, sys
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))
Run Code Online (Sandbox Code Playgroud)
我想在此之后,您可以直接执行以下操作:
from package2.module2 import function2
Run Code Online (Sandbox Code Playgroud)
相对导入失败,因为 module1.py 在直接执行时无法在其父文件夹中查找更多包。
正确的调用需要 -m 参数来表示 module1 是包中的模块。我的终端还需要进入一个目录:
PS C:\...\"parent of project folder"> python -m project.package1.module1
Run Code Online (Sandbox Code Playgroud)
另外,module1.py 需要修改:
from ..package2.module2 import function2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13764 次 |
| 最近记录: |