我有一个以我正在开发的产品命名的模块,一些第 3 方使用相同的模块名称为我们产品的 API 构建了一个包。在尝试使用后者时,模块名称会发生冲突。如果我更改 API 包的名称,我将无法轻松进行更改并回馈上游。更改我们的模块名称会很麻烦。
这听起来像是一个疯狂的问题。现在我们正在通过向 API 模块添加一个“父”模块来解决它。有没有更好的解决方案?
请您参考如下方法:
您应该以这种方式将您自己的模块包装在一个包中:
- 创建目录(例如
mypylib
) - 将名为
__init__.py
的空文件放入目录 - 将您的模块实现文件(例如
mymod.py
)放在目录中 - 假设在
mymod.py
中实现了一个名为submod
的子模块
当你想使用submod
时,你应该这样做:
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "mypylib"))
from mypylib.mymod import submod
我认为大多数 3rd 方模块都应用类似的规则来避免命名冲突,你也应该这样做。
在您当前的情况下,您可以简单地将 __init__.py
和您的模块放在包目录中,然后对所有源文件进行字符串替换以应用模块的新安排。
希望对您有所帮助。