IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Python 进阶 — 创建本地 PyPI 仓库与 Python 程序的离线部署 -> 正文阅读

[系统运维]Python 进阶 — 创建本地 PyPI 仓库与 Python 程序的离线部署

目录

创建本地 PyPI 仓库

安装 pypiserver

$ mkdir pypiserver
$ cd pypiserver

$ mkdir ./packages
$ mkdir ./auth

$ pip install passlib
$ cd auth
# 生成 htpass 文件
# 会 prompt 密码输入,重复两遍一样的 
$ htpasswd -sc .htaccess username

$ cd pypiserver
$ cat ./docker-compose.yml
...
version: "3.3"
services:
    pypiserver:
        image: pypiserver/pypiserver:latest
        volumes:
            - type: bind
              source: ./packages
              target: /data/packages
            - type: bind
              source: ./auth
              target: /data/auth
        command: -P /data/auth/.htaccess -a update,download,list /data/packages
        ports:
            - "8081:8080" 

$ docker-compose -f docker-compose.yml up -d

上传 Python 安装包

  1. 可以使用 twine CLI 工具上传,也可以手动地把安装包 copy 到 pypiserver/packages 目录下。
  2. 可以上传 XXX.tar.gz 源码包,也可以上传 XXX.whl 分发包,都可以用于 pip 安装。

安装 twine CLI 工具:

$ pip install twine

$ ~/.pypirc
...
[distutils] 
index-servers = 
# 不使用 pypi 公共仓库。
#  pypi 
  internal 

#[pypi] 
#username:<your_pypi_username> 
#password:<your_pypi_passwd> 

[internal] 
repository: http://your_pipserver:8081 
username: <some_username> 
password: <some_passwd> 

twine upload -r internal {packet_path}

(可选的)从现有的环境中获取 pip 安装包清单:

pip freeze bypy > requirement.txt
pip download -d ./python_packages -r requirement.txt
cp ./python_packages/* pypiserver/packages

(可选的)从源码编译得到可用于分发的 tar 包和 whl 包:

pip install wheel
pip install -U setuptools
python setup.py sdist bdist_wheel
twine upload -r internal ./dist/yourpackage-0.0.1.tar.gz

使用私有 PyPI 仓库

隐式使用:

$ ~/.pip/pip.conf

[global]
index-url = http://youruser:yourpass@yourserver:8081/simple
[install]
trusted-host=yourserver

显式使用:

$ pip install --trusted-host yourserver \
    --extra-index-url http://youruser:yourpass@yourserver:8081/simple \
    yourpackage 

Python 程序的离线部署

PyPI 上 Python Packages 有好几种格式,并且 PyPI 也没有强制要求哪一种格式是必须要提供的,也不会维护 Packages 所有的版本,这都会导致 pip download 失败(No matching distribution found),简直是一场灾难。开发者们也一直在吐槽 Python Packages 分发难的问题。

  • 源码文件:XXX.tar.gz 或 XXX.zip,源码文件,用 pip 安装,与机器架构无关,但某些 Packages 可能会涉及到 C/C++ 的编译,要求安装机器具有编译环境。
  • wheel 文件(pip install 优先选择):XXX.whl,二进制文件,用 pip 安装,无需编译,但与硬件平台架构相关。
  • egg 文件:XXX.egg,二进制文件,用 easy_install 安装,无需编译,但与硬件平台架构相关。

pip download 获取必须的 Python Packages

pip download with the --platform, --python-version, --implementation, and --abi options provides the ability to fetch dependencies for an interpreter and system other than the ones that pip is running on. --only-binary=:all: or --no-deps is required when using any of these options. It is important to note that these options all default to the current system/interpreter, and not to the most restrictive constraints (e.g. platform any, abi none, etc). To avoid fetching dependencies that happen to match the constraint of the current interpreter (but not your target one), it is recommended to specify all of these options if you are specifying one of them. Generic dependencies (e.g. universal wheels, or dependencies with no platform, abi, or implementation constraints) will still match an over- constrained download requirement.

pip download 默认会把指定的 Packages 及其依赖的 Packages 都一并下载,具体参数请浏览《PEP 425 – Compatibility Tags for Built Distributions》。

有以下关键选项:

  • --only-binary=:all::只下载二进制 Packages(wheel 或 egg)。
  • --no-binary=:all::只下载源码 Packages。
  • --no-deps:不下载依赖。
  • --platform:指定操作系统和硬件平台。
  • --python-version:指定 Python 版本。
  • --implementation:指定编译器,通常是 cpython。
  • --abi

EXAMPLE:

pip download \
    --only-binary=:all: \ 
    --platform linux_x86_64 \ 
    --python-version 27 \ 
    --implementation cp \ 
    --abi cp27mu
    tensorflow

在已经部署好的环境中制作离线部署包

  1. 首先确定离线包制作环境。因为如果存在二进制包的话,那么就会跟硬件平台绑定。
  • x86
  • Linux
  • python2.7
  • pip2
  1. 获取环境所有使用 pip 安装的包。
pip freeze > all_reqs.txt
  1. 优先下载源码包,可以跨平台,但可能依赖编译环境。
pip download --no-binary=:all: -r all_reqs.txt
  1. 过程中可能会出现 No matching distribution found,此时将失败的包摘录出来。

  2. 对没有源码的包,退而下载二进制包(平台绑定)

pip download --only-binary=:all: -r bin_reqs.txt
  1. 如果源码包也没有,二进制包也没有,那么就是 PyPI 已经不维护指定的版本了,此时只能手动下载(可能是不同的版本)。

  2. 还有最坏的情况就是,PyPI 根本就没有这个包,那么就需要自己下载源码,自己编译并上传到私有仓库了。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:53:40  更:2021-10-12 23:54:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:33:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码