我有一个以我正在使用的产品命名的模块,而某些第三方为我们产品的API使用相同的模块名称构建了一个包。在试图使用后者时,模块名称会相互冲突。如果我更改API包的名称,我不会轻易做出更改并向上游返回。改变我们的模块名称将是一团糟。Python模块名称冲突
这听起来像是一个疯狂的问题。现在我们通过向API模块添加一个“父”模块来解决它。有没有更好的解决方案?
我有一个以我正在使用的产品命名的模块,而某些第三方为我们产品的API使用相同的模块名称构建了一个包。在试图使用后者时,模块名称会相互冲突。如果我更改API包的名称,我不会轻易做出更改并向上游返回。改变我们的模块名称将是一团糟。Python模块名称冲突
这听起来像是一个疯狂的问题。现在我们通过向API模块添加一个“父”模块来解决它。有没有更好的解决方案?
你应该换你自己的模块在一个封装中这样说:
mypylib
)__init__.py
一个空文件mymod.py
)在DIRsubmod
实现子模块mymod.py
当你想使用submod
,你应该这样做:
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "mypylib"))
from mypylib.mymod import submod
我想大多数第三方模块应用类似的规则,以避免命名冲突,你应该做这样了。
在您当前的情况下,您可以简单地将__init__.py
和您的模块放在包目录中,然后在所有源文件上进行字符串替换以应用模块的新布置。
我希望这会有所帮助。
嗯,这可能工作。让我思考这个,回到哟。 – marcog
使用'import xx as yy'?但通过查看你的代表,我会说你已经试过了。 –
你能给我们一个使用场景,比如文件结构吗?如果你有自己的应用程序,可以导入产品模块和产品包,你可以使用相对导入来区分这两者。 – OozeMeister
它们在不同的目录中,都在python路径中。 'import xx as yy'将不起作用,因为python路径中首先出现的路径是将要导入的路径。 @OozeMeister目录结构是:$ ROOT/product和$ ROOT/3rdparty/product,其中$ ROOT和$ ROOT/3rdparty都在python路径中。 – marcog