维护 2 个不同的 python 文件夹的导入问题

二头肌
dirFoo1\
    Foo1.py
    lib\
       bar1.py
dirFoo3
    Foo.cpp
dirFoo2
    Foo2.py
    lib\
       bar2.py

Foo1 片段

# Foo1.py
import lib.bar1
Class bar1_class:
....

Foo2 片段

# Foo2.py
sys.path.append("../dirFoo1/lib")
sys.path.append("../lib") # tried removing this too
import Foo1
....

文件 Foo2.py 中的错误消息:

File <path_for_Foo2> 
import Foo1 File <path_for_Foo1> 
from lib.bar1 import bar1_class 
ImportError: No module named bar1

当尝试从dirFoo1\Foo1.pyin使用库dirFoo2\Foo2.py无论Foo1Foo2其子lib目录中有自己的进口。

使用 sys 路径集导入Foo1Foo2

sys.path.append(dirFoo1)

导入错误出现在 Foo1 中的代码上

导入 lib.something_from_bar1

报告错误说不something_from_bar1存在。似乎它指的是 lib in dirFoo2

__init__.pydirFoo1和的地方确实合适dirFoo2有没有办法从另一个未链接的文件夹中导入库__init__.py

黑灯

如果您的两个dirFooX文件夹都在 Python 模块搜索路径上,您将在这两个lib文件夹之间发生冲突,这两个文件夹分别定义了不同的lib包。您的代码只能访问其中之一。有几种不同的方法可以解决冲突。

最简单的方法是重命名一个或两个lib文件夹,然后更新导入语句以匹配。lib对于可在模块命名空间的顶层访问的包,该名称不是很具有描述性。也许他们应该是Foo1LibFoo2Lib

另一种选择是 makedirFoo1dirFoo2into 包,使lib包成为两个不同命名空间中的子包。这可能是最好的方法,因为它不应该需要任何混乱sys.path才能使导入工作。只需确保从顶级文件夹(文件夹上方)运行脚本dirFooX,并使用-m标志运行python -m dirFoo2.Foo2而不是python dirFoo2/Foo2.py。您需要更新所有地方的导入以使用绝对名称 ( from dirFoo1.lib.bar1 import bar_class) 或显式相对名称 ( from .lib.bar1 import bar_class)。

我的最后一个选择可能不是真正适合您情况的选择,但它会起作用。从 Python 3.3 开始,您可以拥有“命名空间”包,它可以从多个文件夹而不是一个文件夹加载模块。如果lib是命名空间包,它将允许bar1.pybar2.py文件都显示为lib解释器中包的一部分这主要用于大型项目,例如Django可以通过第三方模块添加许多额外功能的项目使用命名空间包允许将所有这些附加模块放入共享命名空间。lib如果你真的想要,你可以制作一个命名空间包(尽管正如我上面所说的,lib是如此通用,以至于在顶层使用该名称可能是个坏主意)。您需要做的就是删除__init__.py每个lib文件夹中的文件。就像我说的,这主要用于大型项目,其中许多模块应该是单个包的一部分,由不同的作者编写和分发。除非您的两个lib文件夹非常密切相关,否则它可能不是适合您情况的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从不同的文件夹级别导入类-Python

python维护两个不同的随机实例

如何为不同的屏幕尺寸维护不同值文件夹的大小

Python导入问题有多个文件夹

从不是子文件夹的另一个文件夹导入python文件

如何在Yii2中维护不同目的的不同日志文件

Python3将模块从文件夹导入到另一个文件夹

如何从Python中的不同文件夹导入所有文件

如何从另一个文件夹中的文件导入python类?

VSCode的Python linter认为从文件夹中另一个文件的导入是错误的

如何从python中的两个文件夹导入Excel文件

从另一个文件夹导入 python 模块,主目录带有“-”

从另一个文件夹导入 Python 包

Python 3 模块从另一个文件夹导入错误

如何在一个文件夹中运行python程序以及如何从另一个文件夹导入和运行python程序

从Python中的多个线程维护日志文件

在python中维护单独的类文件

如何导入2个不同的文件图标?

如何从文件夹导入python文件

导入整个python文件文件夹

导入文件夹中的文件python

循环遍历不同的文件夹python

2个本地文件夹,每个文件夹包含同一存储库的不同分支

文件位于不同文件夹时导入模块时出现问题

当您在另一个子文件夹中时,如何从子文件夹导入文件?(Python)

如何从不同文件夹中删除2个同名文件?

Tar.exe 无法添加来自不同文件夹的 2 个文件

Python Pandas - 导入文件夹中的所有 CSV 文件,只拾取 1 个文件

Python - 如何在两个不同文件夹中一一比较文件