0

我需要设置一个私有 PyPI 存储库。我意识到它们有很多可供选择,在四处浏览之后,我选择了djangopypi2 ,因为我发现它们的安装说明最清晰并且项目处于活动状态。

我以前从未使用过 Django,所以这个问题可能真的是一个 Django 问题。我按照说明使用以下命令启动了应用程序:

$ gunicorn_django djangopypi2.website.settings

该存储库正在按我的意愿工作。配置“~/.pypirc”后,我可以使用以下方式上传包:

$ python setup.py sdist upload -r local

在使用 'extra-index-url' 配置 '~/.pip/pip.conf' 后,我可以使用以下方法安装软件包:

$ pip install <package-name>

但是,任何人都可以浏览和下载我的包。似乎仅在上传包时才需要身份验证。我尝试使用此示例要求登录所有页面: Best way to make Django's login_required the default

并设置:

LOGIN_REQUIRED_URLS = (
    r'/(.*)$',
)

LOGIN_REQUIRED_URLS_EXCEPTIONS = (
    r'/users/login(.*)$', 
    r'/users/logout(.*)$',
)

现在 webgui 需要在所有页面上登录,因此该部分按预期工作,但我无法再从命令行使用 pip 和上传实用程序。

我尝试使用'pip.conf'中的extra-index-url设置'pip install xxx',如下所示:

extra-index-url = http://username:password@127.0.0.1:8000/simple/

但它说“根本找不到 xxx 的发行版”

'python setup.py sdist upload' 给出:

Submitting dist/xxx-0.0.1.tar.gz to http://127.0.0.1:8000/
Upload failed (302): FOUND

所以问题是,如何使身份验证能够从“pip”和“python setup.py register/upload”工作?

4

2 回答 2

0

我没有按我的意愿设置 djangopypi2。我尝试设置许多其他 pypi 服务器,例如 PloneSoftwareCenter、mypypi、djangopypi、chishop、pypi-server、ClueReleaseManager、eggbasket 等。但它们要么没有我需要的功能,要么安装失败,因为依赖关系坏了,要么他们没有我可以遵循的安装说明,要么没有文档如何使用它,所以我最终制作了一个更简单的解决方案,适合我。

我真的不需要“python setup.py upload -r private”部分来为我工作,因为我正在使用包装脚本来发布我的 python 包。因此,我只是在脚本中添加了一个 -p (私有)选项,它只是将包构建并 scp 到我的服务器的包目录中。

为了使 pip install 正常工作,我创建了一个 cgi 脚本,它按照 pip 想要的方式创建指向包的链接。在此之后,为了从我的私有存储库安装 pip install,我只需将以下内容添加到我的 pip.conf 中:

$ cat ~/.pip/pip.conf
[global]
extra-index-url = https://username:password@pypi.example.com/simple/

这对我有用,但是如果有一个像 pypi.python.org 这样的界面会很好,但是你也可以在其中限制用户他们应该有权访问哪些模块。因此,如果有人使用像这样工作的现有 pypi 服务器软件设置了解决方案,我仍然会感兴趣。

于 2013-02-02T13:12:41.217 回答
0

如果它真的是你希望它运行的本地主机,而不是使用访问控制,我会将 gunicorn_django 绑定到环回接口:

gunicorn_django -b 127.0.0.1:80 djangopypi2.website.settings

这样,没有其他机器可以访问该服务。

我怀疑您是否可以让 pip 进行身份验证,请参阅此问题

于 2013-01-31T17:49:14.910 回答