在Python中安装包时避免名称冲突

在Python中安装包时避免名称冲突,python,pip,package,name-clash,Python,Pip,Package,Name Clash,从PyPI安装包时,必须使用项目名称,这与实际导入的顶级包的名称不同。一个明显的例子是pyserial和serial,它们通过以下方式安装: pip install serial pip install pyserial 但两者都与以下内容一起使用: 导入序列号 如果浏览站点软件包文件夹,您会看到内容是两个软件包的组合,当然,文件会被最新安装的软件包覆盖,从而产生不可预测的结果 在Python中安装软件包时,有没有避免这种名称冲突的方法?假设您想同时使用pyserial和serial,那么

从PyPI安装包时,必须使用项目名称,这与实际导入的顶级包的名称不同。一个明显的例子是pyserialserial,它们通过以下方式安装:

pip install serial
pip install pyserial

但两者都与以下内容一起使用:

导入序列号
如果浏览
站点软件包
文件夹,您会看到内容是两个软件包的组合,当然,文件会被最新安装的软件包覆盖,从而产生不可预测的结果


在Python中安装软件包时,有没有避免这种名称冲突的方法?假设您想同时使用pyserial和serial,那么您将如何安装它们?

没有办法。至少没有简单的方法。我认为,这是一个更好的链接:因此,这可能是一个噩梦,因为它很容易影响同一环境中其他包的依赖关系……这确实是一个糟糕的情况。我想知道这些问题怎么不经常出现。也许包应该有名称空间(比如
zope
)。对于您自己的代码,您可以通过某种方式绕过它,例如直接使用
importlib
。但是,如果您有依赖项A和B,其中A希望从项目
序列导入
序列
,B希望从项目
pyserial
导入
序列
,那么这就更复杂了。也许通过进一步侵入
importlib
可以检测出哪个模块正试图导入
serial
,然后为正确的模块提供服务……非常感谢链接!很高兴看到有人在考虑这件事!有了连续剧,解决起来很容易,但历史更长、受众范围更广的软件包也可以解决这个问题。据我所知,“名称空间”不能保留在PyPI上,只能保留项目名称。。。