Python 2.7 从不同目录导入模块时出现问题

Python 2.7 从不同目录导入模块时出现问题,python-2.7,import,module,Python 2.7,Import,Module,我想我已经找到了用Python导入模块的方法,但似乎我在这方面还不够。我不明白这为什么不起作用。这是我的结构: |__bin/ |__ __init__.py |__ main.py |__modules/ |__ __init__.py |__ module1.py |__ module2.py |__tests/ |__ __init__.py |__ test_module1.py 我认为通过添加\uuuu init\uu

我想我已经找到了用Python导入模块的方法,但似乎我在这方面还不够。我不明白这为什么不起作用。这是我的结构:

|__bin/
    |__ __init__.py
    |__ main.py
|__modules/
     |__ __init__.py
     |__ module1.py
     |__ module2.py
|__tests/
     |__ __init__.py
     |__ test_module1.py
我认为通过添加
\uuuu init\uuuu.py
文件夹将成为一个包。因为我尝试在我的
main.py
文件中执行此操作:

from modules.module1 import func1

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

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

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

我之所以感到困惑,是因为
nose.tools
module工作正常,可以毫无问题地访问
modules/
目录。正如@unutbu在我的评论中所说,这是
nose
的一个特性,它说


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

奇怪的是,我在其中运行测试的文件夹是
/tests
。这些测试使用相同的导入方法,它通过从
/tests
目录运行
nosetests
来工作。我尝试将
模块添加到我的
PYTHONPATH
变量中,但它仍然说
没有模块命名模块
是的,我需要添加
PYTHONPATH
。我的问题是,我的项目目录没有添加到我的
.bash profile
文件的
PYTHONPATH
中,所以我将它添加到那里,重新启动了终端,现在它可以工作了。谢谢!比如,“当nose导入模块时,它将该模块的目录添加到sys.path”。这可能就是为什么在运行
nosetests
时会看到不同的行为。