不能在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。 安装包