【问题标题】:How to import Python module in another folder, without relative import and editing PYTHONPATH如何在另一个文件夹中导入 Python 模块,无需相对导入和编辑 PYTHONPATH
【发布时间】:2020-07-30 17:28:36
【问题描述】:

这是我的文件夹结构:

.
├── main.py
├── formats
│   ├── __init__.py
│   └── writer.py
└── misc
    ├── __init__.py
    └── util.py

main.py 中,我可以使用以下方法导入util.py

from misc.util import sth

但是,我无法在writer.py 中导入util.py,使用上面的语句和这个命令:

python formats/writer.py

现在最简单的解决方案是弄乱PYTHONPATH:一个简单的export PYTHONPATH=. 就可以了。但是,我不喜欢这样做,也不喜欢相对导入。我现在有什么选择?

【问题讨论】:

    标签: python import module


    【解决方案1】:

    导入机制基于 PYTHONPATH。

    当您运行python main.py 时,包含main.py 的目录在PYTHONPATH 中,因此所有其他包也可以导入。

    当你运行python formats/writer.py时,那么formats目录在PATHONPATH中,它的父目录不在,所以你不能导入不在formats中的模块和包。

    你可以做的是运行 writer 模块,但在 PATHONPATH 中有根目录,你可以做到这一点,甚至不会弄乱环境变量:

    cd /directory/in/which/main.py/is
    python -m formats.writer
    

    与更改 PYTHONPATH 并运行 writer.pypython formats/writer.py 不同,这将保留默认 PYTHONPATH(当前目录)并告诉 Python 在该路径中查找名为 formats.writer 的模块并将其作为主模块运行。

    【讨论】:

    • 嗨,我在这里看到了一个模式。许多使用SOMETHINGPATH 的工具将所需文件的父文件夹用作SOMETHINGPATH,而不是运行它的文件夹(pwd)。它是首选模式吗?如果是,该模式的名称是什么?
    猜你喜欢
    • 2022-12-10
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2021-04-20
    相关资源
    最近更新 更多