无法在 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

原文由 user623990 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 586
2 个回答

在您的特定情况下,您似乎正在尝试从 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 中。

原文由 David Robinson 发布,翻译遵循 CC BY-SA 3.0 许可协议

函数 import 在您的 PYTHONPATH 环境中查找文件。变量和您的本地目录。因此,您可以将所有文件放在同一目录中,或者将路径导出到终端中:

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

原文由 Zenon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题