自定义Python PyPI存储库

Python默认从PyPI存储库下载其依赖项。 它包含最新版本(稳定或不稳定)和各种数量的软件包。 我们很好吧? 那么,定制私有软件包存储库的需求是什么?

依赖管理

您可以显式控制软件包的依赖关系,而不考虑版本弃用或最新的向后不兼容版本。 当然,可以通过在requirements.txt中定义版本来完成此操作但是要确保我们获得的每个软件包都像我们期望的那样,最好使用自定义存储库。

PyPI服务器弃用TLS v1.1,v1.0

PyPI服务器已不再支持TLS 1.0 / TLS 1.1版本的设备以下载软件包。

“我将看到在截止日期之前可能会组织一些预定的TLSv1.0和TLSv1.1的“掉电”,以尝试帮助人们找到需要更新的地方。 任何计划的限电措施将在发生之前发布到status.python.org。”

因此, 升级Python:TLS v1.2很快将成为必需 ,现在它已成为强制性的。 具有Ubuntu 12.04或更低版本的设备具有TLS v1.1,这意味着这些设备无法从默认python软件包管理服务器下载任何python软件包。 通过在终端中运行以下命令来检查TLS版本。

python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"

有一些解决方法,例如明确要求从PyPI服务器下载PIP。

pip install --index-url= https://pypi.python.org/simple/ scapy

这工作了一段时间(在电源不足期间),然后它也没有碰巧。

太多堆栈溢出问题!

在这里,我们只有两个选项,升级TLS版本或使用自定义存储库。 经过一段时间的升级之后,TLS也变得不可能了,因为您需要升级openssl和python密码模块 。 无法升级python模块,因此我们陷入了僵局😕。 这是自定义存储库来解救的地方! 😃

建立自定义存储库

您需要遵循以下步骤来创建自己的自定义python存储库。

  1. 托管Ubuntu服务器
  2. 带有TLS v1.2的Python环境
  3. 公共区域

好吧,让我们弄脏双手dirty

首先登录到您的Ubuntu服务器,然后在require.txt文件中列出所有所需的依赖项,如下所示

boto3==1.4.4
botocore==1.5.90
click==3.1
coloredlogs==8.0
configobj==5.0.6
docutils==0.13.1
futures==3.1.1
jmespath==0.9.3
pexpect==3.1
pyOpenSSL==0.15.1
pyasn1==0.4.2
pycrypto==2.6.1
python-dateutil==2.6.1
requests==2.5.3
s3transfer==0.1.10
scapy==2.4.0
six==1.5.2
speedtest-cli==2.0.0
urllib3==1.7.1
virtualenv==15.2.0
websocket-client==0.16.0
wheel==0.24.0
ndg-httpsclient
distribute
pip==1.5.4

然后创建Python虚拟环境以安装这些依赖项。

pip install virtualenv
virtualenv repo
source repo/bin/activate
mkdir /home/batman/py-cache

在虚拟环境中,现有的pip版本应为1.5.4

pip install -r requirements.txt --no-use-wheel --download="/home/batman/py-cache"

现在已将所有软件包下载到您的Ubuntu服务器中,我们需要将所有软件包组织在标准目录结构中,以便PIP客户端可以识别模块。 为此,我编写了一个小脚本,在py-cache目录中运行它,它将为您完成工作😃

import os

for filename in os.listdir('/home/batman/py-cache'):
try:
package_name = filename.split('.')[0].split('-')
del package_name[-1]
package_name = '-'.join(map(str, package_name))
print package_name
os.system('mkdir %s' % package_name)
os.system('mv %s %s/' % (filename, package_name))
except Exception as e:
print 'ERROR: '
print 'e'

确保已移动所有包装。 如果未移动任何内容,请手动创建目录,然后将tar球移动到其中。 我们快到了! 让我们托管存储库。

首先安装托管客户端

pip install twisted

默认情况下,主机从端口8080启动,请确保没有其他进程拥有它。

lsof -i:8080

使您的终端进入py-cache目录

twistd -n web --path .

而已! 👏您已经建立了自己的自定义存储库,现在将其托管在Ubuntu服务器的端口8080中。

通知PIP客户我们的自定义存储库

在您的客户中,

vim /etc/pip.conf

添加自定义存储库URL

[global]
index-url = http://10.1.10.69:8080

然后导出环境变量PIP_CONFIG_FILE。

export PIP_CONFIG_FILE=/etc/pip.conf

而已。 现在,通常的如下pip安装将从您的自定义存储库安装python软件包。

pip install scappy

在这里,您可以完全控制需要提供的依赖性以及需要进行身份验证和禁止的客户端。 希望我已经与大家分享了有用的信息。

干杯🍻

编码愉快!

From: https://hackernoon.com/custom-python-pypi-repository-409f14975374

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值