Python怎么导入自己写的模块:无法在 Python中导入我自己的模块

原创
2023/10/23 17:47
阅读数 51

我很难理解模块导入如何在 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 相同,这使它首先搜索项目文档

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部