我遇到了一个非常奇怪的问题:
我的文件结构如下:(核心和测试是目录)
core
----file1.py
----__init__.py
test
----file2.py
在file2中,我写道:
from core import file1
结果是:
ImportError: cannot import name file1
答案 0 :(得分:2)
必须在测试目录中创建__init__.py
文件:
因为需要__init__.py
文件才能使Python将目录视为包含包。
parent/
child1/
__init__.py
file1.py
child2/
__init__.py
file2.py
从错误:
如果直接运行child2/file2.py
文件。您无法从child1/file1.py
child2/file2.py
因为只有父目录才能访问子目录。
如果文件夹结构如下:
parent/
child1/
__init__.py
file1.py
child2/
__init__.py
file2.py
file3.py
如果我们运行file3.py
文件。能够访问child1/file1.py
中的child2/file2.py
,file3.py
因为它是从父目录运行的。
如果我们需要从child1/file1
访问child2/file2.py
,我们需要设置父目录:
通过运行以下命令,我们可以实现它......
PYTHONPATH=. python child2/file2.py
PYTHONPATH=.
它指的是父路径。然后从shell
child2/file2.py
文件
答案 1 :(得分:1)
这不是一个奇怪的问题,进口根本就不会那样。
从官方文档:https://docs.python.org/3/tutorial/modules.html
当导入名为spam的模块时,解释器首先搜索具有该名称的内置模块。如果未找到,则会在变量sys.path给出的目录列表中搜索名为spam.py的文件。 sys.path从这些位置初始化:
- 包含输入脚本的目录(或当前目录时) 没有指定文件。)
- PYTHONPATH(目录名列表,语法与shell相同 变量PATH)。
- 依赖于安装的默认值。
您可以查看相关导入,这是一个很好的来源:https://stackoverflow.com/a/16985066/4886716
该帖子的相关信息是除非您像Shawn一样将core
添加到PYTHONPATH
,否则没有好办法。 L说。
答案 2 :(得分:0)
当我尝试你的案子时,我得到了
Traceback (most recent call last):
File "file2.py", line 3, in <module>
from core import file1
ImportError: No module named core
原因是Python
找不到core
。在这种情况下,您需要将core
添加到系统路径,如下所示(在file2.py
的开头添加它们):
import sys,os
sys.path.append(path_to_core.py)
或者,如果您使用命令行运行它,您可以简单地将以下内容放在file2.py
import sys,os
sys.path.append(os.path.join(os.path.dirname(__file__),'../'))
此处,os.path.join(os.path.dirname(__file__),'../')
表示file2.py
的路径。