不能在Python中导入我自己的模块

我很难理解Python中的模块导入是如何工作的(在任何其他语言之前,我从来没有用过它)。

假设我有:

myapp/__init__.py myapp/myapp/myapp.py myapp/myapp/SomeObject.py myapp/tests/TestCase.py 

现在我试图得到这样的东西:

 myapp.py =================== from myapp import SomeObject # stuff ... TestCase.py =================== from myapp import SomeObject # some tests on SomeObject 

但是,我肯定是做错了,因为Python无法看到myapp是一个模块:

 ImportError: No module named myapp 

在你的具体情况下,它看起来像你试图从myapp.py和TestCase.py脚本中导入SomeObject 。 从myapp.py,做

 import SomeObject 

因为它在同一个文件夹中。 对于TestCase.py,做

 from ..myapp import SomeObject 

但是 ,只有从包中导入TestCase时才能使用。 如果你想直接运行python TestCase.py ,你将不得不惹你的path。 这可以在Python中完成:

 import sys sys.path.append("..") from myapp import SomeObject 

尽pipe这通常不被推荐。

一般来说,如果你想要其他人使用你的Python包,你应该使用distutils来创build一个安装脚本。 这样,任何人都可以使用像python setup.py install这样的命令轻松地安装你的软件包,并且在他们的机器上随处可用。 如果你对这个软件包非常认真,你甚至可以将它添加到Python Package Index, PyPI 。

import函数import文件查find您的PYTHONPATH环境。 variables和你的本地目录。 因此,您可以将所有文件放在同一个目录中,或者将pathinput导出到一个terminal::

 export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/" 

出口path是一个好方法。 另一种方法是将.pth添加到您的网站包位置。 在我的Mac我的Python保持在/库/ Python下面的网站包

 /Library/Python/2.7/site-packages 

我在/Library/Python/2.7/site-packages/awesome.pth创build了一个名为awesome.pth的文件,并在文件中放入了下面的path来引用我的真棒模块

 /opt/awesome/custom_python_modules 

你可以试试

 from myapp.myapp import SomeObject 

因为你的项目名称与myapp.py相同,这使得它首先search项目文件

在你的第一个myapp目录中,你可以添加一个setup.py文件,并在setup.py中添加两个python代码

 from setuptools import setup setup(name='myapp') 

在命令行的第一个myapp目录中,使用pip install -e。 安装包