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.read())['tls_version'])"
有一些解决方法,例如明确地说要从PyPI服务器下载PIP。
pip install --index-url = scapy
这已经工作了一段时间,然后它也并没有起作用。
在这里,我们只有两个选项,升级TLS版本或使用自定义存储库。经过一段时间的升级后,TLS也变得不可能了,因为您需要升级openssl和python密码模块。无法升级python模块,因此我们陷入了僵局,这是自定义存储库可以拯救的地方。
建立自定义存储库
您需要执行以下操作来创建自己的自定义python存储库。
1. 托管Ubuntu服务器
2. 带有TLS v1.2的Python环境
3. 公共区域
首先登录到您的Ubuntu服务器,然后在require.txt文件中列出所有所需的依赖项,如下所示
boto3 == 1.4.4
botocore == 1.5.90
click == 3.1coloredlogs
== 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
请求== 2.5.3
s3transfer == 0.1.10
scapy == 2.4.0
六个== 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
distribution
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目录中运行它,它将为您完成工作。
为os.listdir('/ home / batman / py-cache')中的文件名导入os :
尝试:
package_name = filename.split('。')[0] .split('-')
del package_name [-1]
package_name ='-'。join(map(str,package_name))
打印package_name
os.system('mkdir%s'%package_name)
os.system('mv%s%s /'%(filename,package_name))
除外e:
打印'ERROR:'
打印'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。
导出PIP_CONFIG_FILE = / etc / pip.conf
而已。现在,通常的如下pip安装将从您的自定义存储库安装python软件包。
点安装scappy
在这里,您可以完全控制需要提供的依赖性以及需要进行身份验证和禁止的客户端。希望我已经与大家分享了有用的信息。
以上就是关于自定义Python PyPI存储库的全部内容,想了解更多关于Python的信息,请继续关注。