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

时间:2020-04-29 21:57:24

标签: python python-3.x python-packaging

我有一堆代码生成的文件:

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__

1 个答案:

答案 0 :(得分:1)

好吧,您可以在其他任何事情发生之前通过运行import sys; sys.path.append('path/to/project/parent')作为代码的第一行来操纵导入机制。或类似地,set the PYTHONPATH environment variable

但是这种hack虽然可以立即解决您的问题,但具有在不久的将来使问题更难解决的特性。例如,您的IDE不会意识到这一点,并会不断警告您文件不可导入,并且在运行应用程序,测试套件或程序包生成器时断言路径设置正确可能很棘手,或文档生成器,...

这就是为什么,正如您在评论中还指出的那样,最好将parent转换为适当的程序包,并将子模块路径更新为import .b as b__或导入from parent import b as b__