【问题标题】:Trouble importing modules from different dir从不同目录导入模块时遇到问题
【发布时间】:2014-05-25 09:33:48
【问题描述】:

我以为我已经想出了在 Python 中导入模块,但似乎我在这方面仍然缺乏。我无法弄清楚为什么这不起作用。这是我的结构:

|__bin/
    |__ __init__.py
    |__ main.py
|__modules/
     |__ __init__.py
     |__ module1.py
     |__ module2.py
|__tests/
     |__ __init__.py
     |__ test_module1.py

我认为通过添加__init__.py 文件夹成为一个包。因为我尝试在我的main.py 文件中执行此操作:

from modules.module1 import func1

func1module1.py 中的一个简单函数。我做错了什么?

【问题讨论】:

    标签: python-2.7 import module


    【解决方案1】:

    包含modules 的目录必须列在sys.path 中,以便Python 导入modules 包。将该目录添加到 sys.path 的一种方法是将其添加到您的 PYTHONPATH 环境变量中。

    【讨论】:

    • 奇怪的是我有 /tests 文件夹,我从中运行测试。这些测试使用相同的导入方法,它通过从/tests 目录运行nosetests 来工作。
    • 我尝试将modules/ 添加到我的PYTHONPATH 变量中,但它仍然显示No module named modules
    • 是的,你是对的,我需要添加PYTHONPATH。我的问题是我的项目目录没有添加到我的.bash-profile 文件中的PYTHONPATH 中,所以我将它添加到那里,重新启动终端,现在它可以工作了。非常感谢!
    • The nose docs 说,“当nose 导入一个模块时,它会将该模块的目录添加到sys.path”。这可能就是您在运行 nosetests 时看到不同行为的原因。
    【解决方案2】:

    所以问题是我的PYTHONPATH 变量不在我的.bash_profile 文件中(我在Mac 上)。输入export PYTHONPATH=$PYTHONPATH:/Path/To/My/Project 并重新启动终端就可以了。

    我感到困惑的原因是nose.tools 模块工作正常,可以毫无问题地到达modules/ 目录。正如@unutbu 在我的 cmets 中所说,这是 nose 的一个功能,它表示 in their documentation

    在 dir 中创建 __init__.py 文件是不够的,您必须确保 Python 可以读取存储项目的目录(见上文)。

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 2012-01-07
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多