【问题标题】:How restrict read access to djangopypi2?如何限制对 djangopypi2 的读取访问?
【发布时间】:2013-01-15 21:41:59
【问题描述】:

我需要设置一个私有 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”的身份验证?

【问题讨论】:

标签: python django pip pypi cheeseshop


【解决方案1】:

我没有按照自己的意愿设置 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 服务器软件设置了解决方案,我仍然会感兴趣。

【讨论】:

    【解决方案2】:

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

    gunicorn_django -b 127.0.0.1:80 djangopypi2.website.settings
    

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

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

    【讨论】:

    • 其实我只是在 localhost 上试一下,等我开始工作后我会把它放到服务器上。我认为 pip 现在可能支持身份验证,看起来如此看这个页面:github.com/pypa/pip/issues/51
    猜你喜欢
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2011-04-10
    • 2021-12-06
    相关资源
    最近更新 更多