如何限制对djangopypi2的读访问?

时间:2013-01-31 17:33:15

标签: python django pip pypi cheeseshop

我需要设置私有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'启用身份验证?

2 个答案:

答案 0 :(得分:0)

如果它真的是localhost你希望它运行,而不是使用访问控制,我将gunicorn_django绑定到loopback接口:

gunicorn_django -b 127.0.0.1:80 djangopypi2.website.settings

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

我怀疑你可以获得pip进行身份验证,请参阅this question

答案 1 :(得分:0)

我没有按照自己的意愿设置djangopypi2。我试图设置很多其他pypi服务器,如PloneSoftwareCenter,mypypi,djangopypi,chishop,pypi-server,ClueReleaseManager,eggbasket等。但是他们要么没有我需要的功能,要么安装失败,因为依赖关系哪里坏了,要么他们没有我可以遵循的安装说明,要么记录如何使用它,所以我最终制作了一个对我有用的简单解决方案。

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

为了使pip安装起作用,我创建了一个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服务器软件设置解决方案,我仍然会感兴趣。