zoukankan      html  css  js  c++  java
  • 使用pypi-server搭建简单的PyPI源

    pypiserver 是一个最基本的PyPI服务器实现, 可以用来上传和维护python包. 本文介绍 pypiserver 在ubuntu上的基本安装, 配置和使用.

    1. 基本安装和使用

    1.1 安装和启动

    pypiserver 可以在Python 2或者Python 3下运行. 使用pip就可以安装:

    pip install pypiserver
    

    启动 pypiserver 使用以下命令:

    pypi-server
    

    在没有显示指定任何启动参数的时候, pypiserver 是使用 ~/packages 来保存Python包, 同时监听8080端口来提供PyPI服务.

    1.2 上传Python包

    此时, 在创建 ~/packages 目录后, 可以将Python包上传到此目录下. 比如, 有一个Python项目叫 demo , 它的 setup.py 文件内容如下:

    from setuptools import setup
    
    setup(
        name='demo',
        version='0.0.1',
        packages=['demo']
    )
    

    在项目根目录下执行以下命令来生成Python代码分发包:

    python setup.py sdist
    

    执行完上面这条命令后, 可以在项目下的 dist 目录找到分发包 demo-0.0.1.tar.gz. 将分发包上传到 ~/packages 目录下, 接下来就可以访问 pypiserver 上的Python包了.

    1.3 安装 pypiserver 上的Python包

    在安装和启动 pypiserver 后, 可以通过浏览器访问http://localhost:8080可以访问 pypiserver 的默认欢迎页:

    访问http://localhost:8080/simple/demo则可以看到刚上传的_demo-0.0.1.tar.gz_包

    1.3.1 pip

    在本地环境中, 可以使用 pipindex-url 参数来访问 pypiserver 上的Python包:

    # pip search -i http://localhost:8080 demo
    # pip install -i http://localhost:8080 demo
    

    1.3.2 easy_install

    同样也可以使用 easy_install 来访问 pypiserver :

    # easy_install -i http://localhost:8080/simple demo
    

    2. 远程上传项目包

    如果希望通过python setup.py upload命令将本地项目代码上传到PyPI服务器, 可以通过以下步骤来完成.

    2.1 无密码上传项目包

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

    pypi-server -P . -a .
    

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

    此时, 就可以在Python项目的根目录下, 执行远程安装命令来上传包. 比如在本地项目中, 执行以下命令:

    python setup.py sdist upload -r http://localhost:8080
    

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

    2.2 使用密码保护PyPI源

    当希望使用密码来控制Python包的上传操作的时候, 需要使用Apache htpasswd 文件.

    pypiserver 需要 passlib 包来读取 htpasswd 文件. 使用以下命令来安装 passlib :

    pip install passlib
    

    要生成 htpasswd 文件, 需要安装 apache2-utils 工具包. 在Ubuntu上使用以下命令安装:

    apt-get install -y apache2-utils
    

    接下来就可以用 htpasswd 命令来生成密码文件. 假设密码文件路径为 /root/.pypipasswd , 第一次生成密码文件的命令如下:

    htpasswd -c /root/.pypipasswd sam
    

    上述命令中的最后一个参数sam是用户名, 执行命令后, 会提示输入密码.

    当需要在已有的密码文件中添加新的用户名和密码时, 不能再使用-c参数, 否则会将已有的数据覆盖. 比如, 要在上一步生成的文件里添加一个新用户名 john :

    htpasswd /root/.pypipasswd john
    

    接下来就可以使用密码文件来控制上传操作了. 当启动 pypiserver 时, 通过-P参数来指定所要使用的密码文件. 默认情况下, 上传操作会需要密码验证, 如果希望其他操作也需要密码验证, 可以使用-a参数. 具体-a参数的使用可以查阅_pypiserver_的启动命令帮助, 这里不再展开.

    pypi-server -P /root/.pypipasswd
    

    接下来, 在需要上传Python包的系统中, 需要配置Distutils来指定上传操作所需要的用户名和密码.

    创建或者修改 ~/.pypirc 文件, 文件需要以下内容:

    [distutils]
    index-servers = localhost
    
    [localhost]
    repository: http://localhost:8080
    username: sam
    password: 123456
    

    配置中的[localhost] section就是 pypiserver 的地址和用户名密码信息. index-servers值中的localhost就指定了名为localhost的section. 接下来, 当我们向名为 localhost 或者地址为 http://localhost:8080 的PyPI源上传Python包时, 用户名 sam 和密码 123456 就会被用来验证操作权限:

    python setup.py sdist upload -r localhost
    

    3. 其他配置

    3.1 指定监听端口

    默认情况下 pypiserver 监听8080端口, 我们可以通过-p参数来指定期望的端口:

    pypi-server -p 9090
    

    3.2 指定包目录

    默认情况下 pypiserver 使用_~/packages_ 目录来读取和保存Python包. 我们可以使用-P参数来修改:

    pypi-server -P /opt/pypiserver/packages
    

    3.3 请求转发

    当请求的Python包, 在本地 pypiserver 上没有找到时, 它会将请求转发到外部PyPI源, 默认为 https://pypi.doubanio.com/simple . 对于国内使用来说, 可以通过 --fallback-url 参数将转发目的地址设置为豆瓣源:

    pypi-server --fallback-url https://pypi.doubanio.com/simple
    

    4. 相关资源

  • 相关阅读:
    HTTP协议详解
    【VC++开发实战】迅雷晒密及批量查询流量程序
    C/C++中指针和引用之相关问题研究
    C++类中拷贝构造函数详解
    构造函数为什么不能是虚函数
    High一下!
    文件搜索神器everything 你不知道的技巧总结
    不要被C++“自动生成”所蒙骗
    对象的传值与返回
    深入浅出Node.js (3)
  • 原文地址:https://www.cnblogs.com/mithrilon/p/8954677.html
Copyright © 2011-2022 走看看