没有名为xxxx的模块。如何导入相对路径?

时间:2019-05-07 19:14:08

标签: python-3.x module relative-import

我创建了一个简化版本,以仅专注于获得相对的工作路径。这是我的文件结构:

|
-project
   |-package1
   |    |--page
   |    |-__init__
   |
   |-package2
        |-test
        |-__init__

我正在尝试将页面导入测试。但是,我得到以下错误,即package1不是模块。在下面,我键入了代码中的所有内容。很简单的。我只是想将页面导入测试。是否有任何我无法导入的东西(文件或页面设置)?

page.py


one='half'
two='ling'

tests.py


import os
import sys

three = (one+two)
print(three)

2 个答案:

答案 0 :(得分:0)

您是否尝试过“从package1导入页面”到test.py中?还是“从package1.page导入页面”?

答案 1 :(得分:0)

更新

import时,Python Interpreter会在以下位置搜索:

  
      
  • 内置
  •   
  • 当前目录
  •   
  • $ PYTHONPATH,环境变量
  •   
  • 与安装相关的其他目录
  •   

最后三个组成为sys.path

对于您来说,要将package1导入package2中的某些脚本中,有两种方法:

  
      
  1. project路径添加到PYTHONPATH中。
  2.   
  3. 动态地将project路径附加到sys.path
  4.   

我想您会喜欢后一种解决方案,只需添加

import sys
sys.path.append('..')

一切都将正常工作。

Plus:虽然不在当前目录中使用该模块,但有点不方便。我只看到了几个实际的python项目,而我看到的是其中一些在 project root 中使用单个main.py来运行整个项目,包括测试用例。也许更推荐这种结构。

希望有帮助〜


原始答案:

此目录结构在我的计算机上可以通过以下方式正常工作:

import package.page as page
page.foo() # a function in page

我可以猜测:您当前的工作目录可能不在您的项目目录下。

要检查,请对此进行测试:

import os
print(os.getcwd())

如果输出的不是您当前的目录,那是我的情况。我以前曾经搞混过。

为避免这种情况,您可以:

  1. cd到您的目录,然后再运行Python
  2. 在您的代码中运行os.chdir(...),以更改您的工作目录。

如果不是这种情况,请提供更多信息。