导入另一个目录中的python文件失败

时间:2017-05-15 09:01:32

标签: python import module directory

我遇到了一个非常奇怪的问题:

我的文件结构如下:(核心和测试是目录)

 core
    ----file1.py

    ----__init__.py

 test

    ----file2.py

在file2中,我写道:

from core import file1

结果是:

ImportError: cannot import name file1

3 个答案:

答案 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.pyfile3.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的路径。