我有一个具有以下目录结构的项目:
目录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/