如何使用PIP安装具有不同名称的python包

如何使用PIP安装具有不同名称的python包,python,duplicates,package,pip,Python,Duplicates,Package,Pip,在使用PIP安装新的python包时,是否可以更改包名,因为有另一个包具有相同的名称 或者,如何更改现有程序包的名称?使用pip命令行工具无法做到这一点。PyPI上的所有包都有唯一的名称。包通常需要并且相互依赖,并且假定名称不会更改。我认为使用pip不可能更改包的名称。 因为pip可以安装现有的软件包,如果没有为更改软件包名称而编写的软件包名称,则会出现错误。我认为一种方法是使用 pip download 见文件。您可以在下载包后更改包的名称,然后手动安装。我还没有测试过这个,但它似乎应该可以

在使用PIP安装新的python包时,是否可以更改包名,因为有另一个包具有相同的名称


或者,如何更改现有程序包的名称?

使用
pip
命令行工具无法做到这一点。PyPI上的所有包都有唯一的名称。包通常需要并且相互依赖,并且假定名称不会更改。

我认为使用pip不可能更改包的名称。
因为pip可以安装现有的软件包,如果没有为更改软件包名称而编写的软件包名称,则会出现错误。

我认为一种方法是使用

pip download

见文件。您可以在下载包后更改包的名称,然后手动安装。我还没有测试过这个,但它似乎应该可以工作。

如果您在使用pip安装“模块”时难以安装正确的软件包,您可以下载相应的控制盘文件(.whl扩展名),然后直接使用pip安装。在过去的各种情况下,这对我都很有效

如果您不需要为同一个项目同时使用两个包,请使用virtualenv。 使用virtualenv,您还可以拥有不同版本的软件包

另一种方式可能是网站包,如前所述


创建一个新的virtualenv,然后在新的virtualenv上安装该软件包,这样您也可以拥有不同版本的软件包。

我在库中遇到了这个问题,它们都想安装到
PYTHONPATH/site packages/gmail/
。显然pygmail软件包有问题,它应该安装到pygmail文件夹中,但他们已经多年没有进行任何更新了


作为一个临时解决方案,我安装了一个(pygmail),然后更改了文件夹名称(gmail-->pygmail和gmail-v#.dist info-->pygmail-v#.dist info),然后正常安装了第二个。似乎是可行的,只要我不尝试更新第一个包
import-gmail
import-pygmail
按预期工作。

无法通过为pip指定参数来更改“导入路径”(安装名称)。所有其他选项都需要某种形式的“包更改”:

A.使用
pip安装-e git+http://some_url#egg=some-名称
:这样即使两个包具有相同的导入路径,它们也将保存在不同的目录下(使用
之后提供的一些名称
。\egg=
)。在此之后,您可以转到包的源目录(通常是
venv/src/some name
)并重命名一些文件夹以更改导入路径

B-C.分叉存储库,进行更改,然后从该存储库安装软件包。或者,您可以使用不同的名称在PyPI上发布您的包,并按名称安装它


D.使用
pip download
将其中一个包放入您的项目中,然后根据需要重命名文件夹

我猜您引用的包中至少有一个没有安装,因为它们强制使用包的唯一名称;这意味着您正在从源代码安装该软件包,这意味着您还可以自由地将其名称更改为您想要的任何名称。您可以通过更改出错包根目录中的
setup.py
文件来完成此操作。

包名应该是唯一的。您是否正在尝试升级现有软件包?不,它们是两个不同的twitter API软件包,具有相同的名称…我同意软件包名称应该是唯一的。这在理论上很好,但在实践中并不总是如此。解决这个问题的机制是什么?我认为如果
pip
能够在实践中弥补这种违反理论的行为,那就太好了。我认为这是不可能的,也就是说,两个不同的包有完全相同的名称。如果真是这样的话,你能提供更多关于这些包裹的细节吗?你可能想问Twitter为什么他们以相同的名称发布不同的包。@这可能会发生,例如,se the import和from import语句,这两个语句发生冲突,我现在面临这个问题,因为我需要一个函数来自一个函数,另一个函数来自另一个函数。有人应该重新考虑这不是真的。我安装了
django表情符号
emoji
。要从中导入,您需要从
表情符号导入。请参见和上的示例。我们该如何解决这个问题?@KrystianCybulski你能重新表述一下“从需要从表情符号导入的每个表情符号中导入”的意思吗?不知道你的意思是什么?
import emoji
要使用这些库中的任何一个,如果你两者都需要怎么办?我知道你在这里得到了什么,但我想知道是否有任何不涉及创建叉子的方法可以继续。@shuttle87我认为这是创建叉子(以及可能的拉动请求)是正确的方法的最清楚的例子。您已经在开源回购协议中发现了一个bug,您处于修复它的独特位置。。。您不必这样做,但这是一个相对容易的提升,将使整个开源社区受益。@vlsd我不确定您在答案中的推理是否正确。分发名称是唯一的,但包名称不一定是唯一的。很好@normanius我甚至没有想到这一点,因为大多数(但不是所有)包都有相同的发行版和包名。。。我想知道为什么他们不强制使用唯一的包名称,这是推荐的(),但不是强制的。从技术上讲,可以将多个包捆绑到同一发行版中。我想这就是为什么允许使用不同的包名。另一个原因是它允许项目/发行版替换其他发行版的现有包。但我同意,Python的包基础设施有点混乱,我想他们本可以做得更多来保持干净。