此问题在此处已有答案:
How to import a module from a folder next to the current folder?(3个答案)
11天前关闭
我无法从其他文件夹导入。
这是我的树。
(venv) ma1lor@ma1lor:~/test$ tree
.
├── asd
│ ├── __init__.py
│ └── message.py
└── sad
├── __init__.py
└── main.py
2 directories, 4 files
字符串
在main.py
中:
from asd.message import message_func
from asd.message import email
print(message_func())
print(email)
型
在message.py
中:
def message_func():
return 'hello , world'
email =43
型
这个问题不仅是在这个项目上,它的一切。不仅在linux
,而且在windows
(我有2个操作系统)
我试图从另一个文件夹导入功能,但没有工作。
1条答案
按热度按时间798qvoo81#
如果你的目的是让两个包成为一个包的一部分,那么把两个目录放在一个包目录中,在基目录中添加一个
__init__.py
,然后使用包内导入。例如:字符串
如果您的意图是将
ads
和sad
作为两个单独的包,那么您的导入是正确的。* 但是 *,这取决于您如何执行。型
这是不正确的:不要从包本身执行文件。转到包的根目录(在您的示例中为
.
),然后执行型
现在,Python将从当前目录
.
中查找导入的软件包。当在sad
目录中时,Python不会向上搜索目录级别以搜索相邻的软件包,如asd
。使用package - subpackage结构,您甚至可以更进一步:
型
__init__.py
文件的目录)中有可执行文件。如果你写了一个可执行文件(有些人称之为“脚本”),请在任何包目录的 * 外部 * 找到它。包文件应该包含可重用的函数,可执行文件应该导入包并调用这些函数。你甚至可以把脚本放在根目录下的一个单独的目录下,比如
scripts/
,然后从那里运行它们。可能是script/something.py
;如果你在scripts
目录下运行它们,你可能需要你的PYTHONPATH
(或者首先用pip install -e .
安装软件包,但是如果你能避免使用PYTHONPATH
,那就更好了:首先依赖于默认的Python包和导入查找,这使您的设置更具可移植性,然后才开始调整环境。