是否有办法动态地改变子模块的名称?

问题描述 投票:1回答:1

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

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__
python python-3.x python-packaging
1个回答
1
投票

好吧,你可以通过运行以下命令来操纵导入机制 import sys; sys.path.append('path/to/project/parent') 作为第一行代码,然后才有其他事情发生。或者类似地。摆设 PYTHONPATH 环境变量.

但是,这种黑客虽然现在可以解决你的问题,但却有让事情在不久的将来更难解决的特性。例如,你的IDE不会意识到这一点,会不断地警告你你的文件不能导入,而且当运行你的应用程序、测试套件、包构建器或文档构建器时,要保证路径设置正确可能会很棘手......。

这就是为什么,正如你在评论中所指出的,最好将 parent 到一个合适的包中,并将子模块路径更新为或 import .b as b__ 或导入 from parent import b as b__.

© www.soinside.com 2019 - 2024. All rights reserved.