我很难理解模块导入如何在 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
,你将不得不弄乱你的路径。这可以在 Python 中完成:
import sys
sys.path.append("..")
from myapp import SomeObject
虽然这通常是不推荐的。
一般来说,如果你想让其他人使用你的 Python 包,你应该使用distutils来创建一个安装脚本。这样,任何人都可以使用像python setup.py install
这样的命令轻松地安装你的包,它将在他们的机器上随处可见。如果你认真对待这个包,你甚至可以将它添加到 Python 包索引PyPI中。
函数import
将文件查找到您的 PYTHONPATH env.变量和您的本地目录中。因此,您可以将所有文件放在同一目录中,也可以将路径键入导出到终端:
export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"
导出路径是一个好方法。另一种方法是将.pth 添加到您的 site-packages 位置。在我的 mac 上,我的 python 将 site-packages 保存在下面显示的 / Library / Python 中
/Library/Python/2.7/site-packages
我在 / Library / Python / 2.7 / site-packages / awesome.pth 创建了一个名为 awesome.pth 的文件,并在该文件中放置以下引用我的真棒模块的路径
/opt/awesome/custom_python_modules
你可以试试
from myapp.myapp import SomeObject
因为您的项目名称与 myapp.py 相同,这使它首先搜索项目文档
{{item.user_info.nickname ? item.user_info.nickname : item.user_name}}
作者 管理员 企业
{{itemf.name}}
{{itemc.user_info.nickname}}
{{itemc.user_name}}
回复 {{itemc.comment_user_info.nickname}}
{{itemf.name}}