Python 导入没有 "from"

标签 python python-import importerror

我有一个具有以下目录结构的项目:

目录1
--dir2
----file1.py
----file2.py
--file3.py

在 file3 中,我调用 file1 中的函数。在file1中,它调用file2中的函数,因此它导入了file2。 dir2 中的其他文件也由 file1 导入。

目前,file1 导致线路出现 ModuleNotFound 错误 导入文件2。这可以通过将其更改为 from dir2 import file2 来解决,但问题是我需要遍历 dir2 中的所有文件并尝试修复导入。

dir2 是在 Github 上找到的一个项目,我真的不想每次拉取任何更改时都更改所有导入。有没有办法导入 file2 以在 file1 中使用,而无需更改导入?

我使用的是 Python 3.9.12。

最佳答案

Python 根据 sys.path 变量执行模块解析。您可以将 dir2 附加到此路径,以便可以解析其中的任何导入:

file3.py

import sys
sys.path.append("dir")

<other imports>

或者,您可以使用 PYTHONPATH 环境变量来扩充 sys.path:

$ PYTHONPATH=dir python3 file3.py

请记住,路径修改通常是一种代码味道,只有在绝对必要时才应使用。您很可能可以通过将此“目录”(第三方依赖项)作为真正的 pip 安装依赖项包含在项目中来解决根本问题,然后它将“在路径上”。除此之外,您应该只通过第一方模块覆盖第三方代码,而不是直接将文件添加到其目录中。

from <dependency> import <class>

class App<Class>(<Class>):
    def overriden_method(self):
        return "my custom functionality"

引用文献:

关于Python 导入没有 "from",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72580211/

相关文章:

python - 在分组的 Pandas 数据框中的最大值后删除行

Python:惰性子模块导入使父模块无效 > UnboundLocalError - 但为什么呢?

python - 如何在VSCode中自动将根目录添加到python路径中?

Python Beautifulsoup 获取标签下的文字

python - 由于 "IntegrityError: duplicate key value violates unique constraint",无法在 django-cms 上发布页面

python - 受监控的培训类(class)如何运作?

python - 为什么在我导入模块时 Python 会运行我的模块,我该如何停止它?

python - "import numpy"尝试加载我自己的包

Python:来自已编译源代码的 ImportError

Python 从更高/其他文件夹导入函数