Python模块名称冲突
我有一个模块,它的名字和我正在开发的产品一样。然后,有个第三方为我们产品的API做了一个包,结果这个包的名字也和我的模块一样。现在我在使用这个包的时候,名字冲突了。如果我改这个API包的名字,那我就很难再做修改并把改动贡献回去。如果我改我们自己模块的名字,那就会变得很麻烦。
这听起来像是个很棘手的问题。目前我们通过给API模块添加一个“父”模块来解决这个问题。有没有更好的解决办法呢?
1 个回答
2
你应该按照以下步骤把自己的模块放进一个包里:
- 创建一个文件夹(比如叫
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
我觉得大多数第三方模块也遵循类似的规则,以避免名字冲突,所以你也应该这样做。
在你现在的情况下,你可以简单地把 __init__.py
和你的模块放进一个包文件夹里,然后在所有源文件中做字符串替换,以适应你模块的新安排。
希望这能帮到你。