有没有办法动态更改子模块名称

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.pyb.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__.