如何在setup.py中处理私有依赖关系链接


10

在工作中,我们使用私有pypi服务器。将此pypi服务器指定为依赖项链接:

...
from setuptools import setup

config = ConfigParser.ConfigParser()
rc = os.path.join(os.path.expanduser('~'), '.pypirc')
config.read(rc)
dependency_links = [
    'https://{}:{}@<private_url>'.format(
        config.get('dc', 'username'), config.get('dc', 'password'))]

setup(
    dependency_links=dependency_links,
    ...)

在我们大多数情况下,这都可以正常工作。但是,前段时间我们不得不在客户端服务器上安装软件包。为此,我们必须先复制有效副本,.pypirc然后才能安装任何软件包。

上面的代码也感觉像是一个肮脏的hack。

在不使用硬编码凭据的情况下指定安全的依赖关系链接的正确方法是什么?


1
我明白你的意思了。不必担心被黑客入侵,但这意味着您将基于每个软件包的身份验证与依赖项管理耦合在一起。这种方法不是便携式的或可伸缩的。
乔尔·科内特

Answers:


1

这似乎是一个合理的选择,而不是一个肮脏的hack。

  1. 有一个凭证配置文件
  2. 有一种方法可以将自定义URL +凭据注入到依赖项中

工作要做得很好,要做得更好,唯一的办法就是记录下来,并在多个不同的设置或多个pypi服务器上进行尝试,并解决由此带来的问题。



0

使用此解决方案时要非常小心。如文档所述

它们还将被写入鸡蛋的元数据中,以供EasyInstall之类的工具在安装.egg文件时使用。

即,您的凭据将分布在中.egg。通过扎根setuptools源代码,我发现在内部似乎在使用easy_install命令来安装依赖项。因此,将以下内容添加到您的文件中setup.cfg会导致它选择一个私有存储库:

[easy_install]
index_url=https://username:password@your.repo/simple

这仍然有一个骗局,即您的凭据在安装时会打印到终端上,但是至少它们不会出现在您的发行版中。请注意,此解决方案将替换您的索引URL,因此您的私有仓库也必须镜像公共仓库。我没有看到以任何明显的方式添加索引URL的支持。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.