在 Python 3 中的嵌套包之间导入
Importing between nested packages in Python 3
运行 Python 3.6.1,我正在尝试获取一个文件 (world.py
) 以从我项目中的另一个包导入。
我的目录结构:
+-- test_project
| +-- sub_project1
| | +-- __init__.py
| | +-- hello.py
| +-- sub_project2
| | +-- __init__.py
| | +-- world.py
hello.py
:
def say_hello():
return("Hello ")
world.py
:
from test_project.sub_project1.hello import say_hello
print(say_hello() + "world!")
当我进入 sub_project2
目录和 运行 world.py
时,我一直得到这个:
ModuleNotFoundError: No module named 'test_project'
我尝试将导入语句重写为 from sub_project1.hello import say_hello
。我也试过在我的 PATH 环境变量中包含 test_project
目录。我试过在我的 PATH 中包含 test_project
的 parent 目录。我试过在我的 PATH 中包含 sub_project2
的目录。我在网上搜索了答案,但无法找出我遗漏的内容。
我做错了什么?
您需要将"hello.py"的路径添加到sys.path
import sys
sys.path.append('../sub_project1')
from hello import say_hello
print(say_hello() + "world!")
输出:
Hello world!
来源是 here。这个讨论真的很有帮助。
编辑: 因为 "sub_project1" 有 __init__.py
,你可以使用:
import sys
sys.path.append('..') #Adds upper directory sys.path
from sub_project1.hello import say_hello
print(say_hello() + "world!")
问题是您必须将项目添加到 python 路径。原因是python首先在这些位置搜索:
包含输入脚本的目录(或当前目录)。
PYTHONPATH(目录名称列表,语法与 shell 变量 PATH 相同)。
- 依赖于安装的默认值。
因此,您必须将目录 C:\Users\your_user\dir_before_test_project\
添加到 PYTHONPATH
环境变量
运行 Python 3.6.1,我正在尝试获取一个文件 (world.py
) 以从我项目中的另一个包导入。
我的目录结构:
+-- test_project
| +-- sub_project1
| | +-- __init__.py
| | +-- hello.py
| +-- sub_project2
| | +-- __init__.py
| | +-- world.py
hello.py
:
def say_hello():
return("Hello ")
world.py
:
from test_project.sub_project1.hello import say_hello
print(say_hello() + "world!")
当我进入 sub_project2
目录和 运行 world.py
时,我一直得到这个:
ModuleNotFoundError: No module named 'test_project'
我尝试将导入语句重写为 from sub_project1.hello import say_hello
。我也试过在我的 PATH 环境变量中包含 test_project
目录。我试过在我的 PATH 中包含 test_project
的 parent 目录。我试过在我的 PATH 中包含 sub_project2
的目录。我在网上搜索了答案,但无法找出我遗漏的内容。
我做错了什么?
您需要将"hello.py"的路径添加到sys.path
import sys
sys.path.append('../sub_project1')
from hello import say_hello
print(say_hello() + "world!")
输出:
Hello world!
来源是 here。这个讨论真的很有帮助。
编辑: 因为 "sub_project1" 有 __init__.py
,你可以使用:
import sys
sys.path.append('..') #Adds upper directory sys.path
from sub_project1.hello import say_hello
print(say_hello() + "world!")
问题是您必须将项目添加到 python 路径。原因是python首先在这些位置搜索:
包含输入脚本的目录(或当前目录)。
PYTHONPATH(目录名称列表,语法与 shell 变量 PATH 相同)。
- 依赖于安装的默认值。
因此,您必须将目录 C:\Users\your_user\dir_before_test_project\
PYTHONPATH
环境变量