点名冲突

时间:2015-05-21 21:06:22

标签: python package pip setup.py pypi

我的项目取决于一些公共包和一些私人包。其中一个私有名称与PyPi上的另一个公共程序包同名(让我们称之为“冲突”#39;)。在我的setup.py文件中,我有

install_requires = ['public_a', 'public_b', 'conflicting' ],
dependency_links = ['https:blah/blah/blah/conflicting.git#egg=conflicting']

即使我在我的依赖关系链接中指定了egg,pip仍然会安装公共包'冲突'。当名称冲突时,有没有办法确定私有包的优先级?

2 个答案:

答案 0 :(得分:2)

我知道这有点像黑客,但这很容易,实际上有效:

将100添加到本地软件包的版本号。只要pip可以通过--extra-index--find-links options找到您的本地包,它就会比较版本号并获取满足相关包的setup.py中指定的版本控制的最高可用版本。如果您的软件包具有更高版本,它将获胜。

答案 1 :(得分:1)

您可以设置自己的PyPi服务器并将其用作主要来源,将全局服务器用作次要来源。这将优先考虑您的包裹,而不是公共包裹。

e.g。手动: pip install --index-url=<your-pipy-server> --extra-index-url=https://pypi.python.org/simple <your package>

当然,如果您尝试安装的版本在服务器上缺失但可以从冲突的公共包中获得,则可能会发生错误。