有没有办法动态更改子模块名称
is there a way to change the submodule name dynamically
我有一堆代码生成的文件:
parent/
a.py
b.py
<...>
aa.py
它们相互导入,假设它们位于它们所在的任何包的根目录下。
例如a.py
:
import b as b__
我想将整个 parent
子目录包含到另一个项目中,这样生成的树看起来像
project/
main.py
parent/
a.py
b.py
<...>
但是,上面树中父级中的所有内容在相互导入时都会出现问题。除了进入 a.py
、b.py
、.... 并将所有绝对导入转换为相对导入之外,有没有办法解决这个问题?例如执行以下 100 次:
import .b as b__
好吧,您可以通过 运行 import sys; sys.path.append('path/to/project/parent')
作为第一行代码来操作导入机制,然后再进行任何其他操作。或者类似地,set the PYTHONPATH
environment variable.
但是这种黑客攻击虽然现在可以解决您的问题,但 属性 会使事情在不久的将来更难修复。例如,您的 IDE 不会意识到这一点,并且会不断警告您您的文件不可导入,并且在 运行 您的应用程序时断言路径设置正确可能很棘手,或测试套件,或包生成器,或文档生成器,...
这就是为什么,正如您在评论中也指出的那样,最好将 parent
变成一个合适的包,并将子模块路径更新为 import .b as b__
或导入 from parent import b as b__
.
我有一堆代码生成的文件:
parent/
a.py
b.py
<...>
aa.py
它们相互导入,假设它们位于它们所在的任何包的根目录下。
例如a.py
:
import b as b__
我想将整个 parent
子目录包含到另一个项目中,这样生成的树看起来像
project/
main.py
parent/
a.py
b.py
<...>
但是,上面树中父级中的所有内容在相互导入时都会出现问题。除了进入 a.py
、b.py
、.... 并将所有绝对导入转换为相对导入之外,有没有办法解决这个问题?例如执行以下 100 次:
import .b as b__
好吧,您可以通过 运行 import sys; sys.path.append('path/to/project/parent')
作为第一行代码来操作导入机制,然后再进行任何其他操作。或者类似地,set the PYTHONPATH
environment variable.
但是这种黑客攻击虽然现在可以解决您的问题,但 属性 会使事情在不久的将来更难修复。例如,您的 IDE 不会意识到这一点,并且会不断警告您您的文件不可导入,并且在 运行 您的应用程序时断言路径设置正确可能很棘手,或测试套件,或包生成器,或文档生成器,...
这就是为什么,正如您在评论中也指出的那样,最好将 parent
变成一个合适的包,并将子模块路径更新为 import .b as b__
或导入 from parent import b as b__
.