搭建 pip 私源


搭建pip 私源

环境准备:

机器IP地址:192.168.10.11

使用docker容器搭建,基础镜像是centos7

软件包:pypiserver

查看pypiserver 项目位置,

/usr/local/python3/lib/python3.9/site-packages/pypiserver

安装后,找到了他,进入目录发现他是一个 类似的 flask 或者 django 的应用,难怪可以用gunicorn 使用

github 地址:https://github.com/pypiserver/pypiserver

操作步骤:

  1. 拉取centos7 镜像,启动容器,之后进入容器,初始化容器环境

    docker pull centos:7
    docker run -itd --name pipserver -h pypi -p 12000:12000 centos:7 bash
    docker exec -it pipserver bash
    

    检查yum 源,python3 的环境,pip3 的环境,pypiserver 和其他相关的pip包。

    yum install vim python3 -y
    
    #修改python 和pip 的软链接
    rm /usr/bin/python
    ln -s /usr/bin/python3 /usr/bin/python
    ln -s /usr/bin/pip3 /usr/bin/pip
    #验证修改是否成功
    python -V
    pip -V
    
    #也可以使用python 脚本安装更新的python 和pip,因为上面的pip3.6 版本实在太低了,pip 没有config 指令。使用宿主机的升级pyhton 脚本安装python 即可。
    
    #设置pip 服务器地址,换成国内pip源
    mkdir ~/.pip
    cat << EOF > ~/.pip/pip.conf
    [global]
    timeout = 6000
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    trusted-host = https://pypi.tuna.tsinghua.edu.cn/simple
    EOF
    
    
    #安装pip 相关包
    pip install pypiserver flask gunicorn
    
    #修改PATH 变量,将/usr/bin/python3/bin 加入到PATH 中 ,这样才能找到pypi-server 命令
    将下面 变量声明加到 /etc/bashrc 中,因为如果使加到/etc/profile里,进入容器后不生效
    export PATH=$PATH:/usr/local/python3/bin
    
    
  2. 将容器制作成镜像

    docker commit -m "new env" -a "ffy" pipserver pip-server:v1
    
  3. 启动容器,启动pypiserver 设置pypi

    docker run -itd --name pip_container -h pypi -p 11000:12000 -v /opt/pip_packages:/root/packages pip-server:v1
    #进入容器
    docker exec -it pip_container bash
    
    #启动pypi-server 
    pypi-server -p 12000 -P. -a . &
    

    https://www.linuxidc.com/Linux/2018-06/152692.htm

    # -p 参数后接端口号,-P 和 -a 后面接点表示不用密码验证, 最后面的包的目录
    pypi-server -p port -P . -a . packages_dir 
    

    无密码上传项目包

    默认情况下, pypiserver 的上传操作是密码保护的, 不过可以通过以下启动参数来关闭密码保护:
    pypi-server -P . -a .

    上述命令中的-P参数用来指定密码文件, -a用来指定需要密码保护的操作. 当这两个参数同时指定为.时, 表示所有的操作都不需要密码保护。pypi-server -h 中有这个说明。

    然后在项目里创建setup.py 这个 启动文件,使用命令 setup.py 打包项目

    #可以在项目文件夹下使用 python setup.py sdist 生成tar.gz 的包或者其他类型的包
    bdist_wheel       create a wheel distribution
    sdist             create a source distribution (tarball, zip file, etc.)
    bdist_rpm         create an RPM distribution
    bdist             create a built (binary) distribution
    bdist_wininst     create an executable installer for MS Windows
    
  4. 上传:

    打包完成后,在Python项目的根目录下, 执行远程安装命令来上传包. 比如在本地项目中, 执行以下命令:
    python setup.py sdist upload -r http://192.168.10.11:11000

    这时, upload 命令仍然会提示输入密码, 此时直接回车确认就可以了.

    还可以时用 twine 命令 上传

    twine upload dist/* --repository-url http://192.168.10.11:11000
    
  5. 下载:

    下载包到本地的当前目录,然后执行安装当前目录下的包

    cd /opt/pip_down
    pip download own-ftp -i http://192.168.10.11:11000 --trusted-host 192.168.10.11
    #离线安装pip包直接接包的全路径即可
    pip install /opt/pip_down/own_ftp-1.0-py3-none-any.whl
    
    

使用gunicorn 启动 pipserver

? gunicron 详解:https://www.jianshu.com/p/69e75fc3e08e

? https://docs.gunicorn.org/en/stable/

  1. 进入容器安装好gunicorn 和 pipserver 后,可以先写一下 gunicorn 的 配置文件。

    import multiprocessing
    
    bind = '127.0.0.1:8000'
    workers = multiprocessing.cpu_count() * 2 + 1
    
    backlog = 2048
    worker_class = "gevent"
    worker_connections = 1000
    daemon = False
    debug = True
    proc_name = 'gunicorn_demo'
    pidfile = './log/gunicorn.pid'
    errorlog = './log/gunicorn.log'
    
  2. gunicorn 常用命令:

    -b ADDRESS, --bind ADDRESS
    绑定我们服务的ip 和 端口
    -w INT, --workers INT The number of worker processes for handling requests.
    -w 后面假一个数字表示  处理请求的最大进程数
    -c CONFIG    : CONFIG,配置文件的路径,通过配置文件启动;生产环境使用;
    

    启动gunicorn

    gunicorn -c /home/gunicorn_conf.py pipserver