使用pypi-server搭建簡單的PyPI源

pypiserver 是一個最基本的PyPI服務器實現, 能夠用來上傳和維護python包. 本文介紹 pypiserver 在ubuntu上的基本安裝, 配置和使用.html

1. 基本安裝和使用

1.1 安裝和啓動

pypiserver 能夠在Python 2或者Python 3下運行. 使用pip就能夠安裝:python

pip install pypiserver

啓動 pypiserver 使用如下命令:apache

pypi-server

在沒有顯示指定任何啓動參數的時候, pypiserver 是使用 ~/packages 來保存Python包, 同時監聽8080端口來提供PyPI服務.ubuntu

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 的默認歡迎頁:url

訪問http://localhost:8080/simple/demo則能夠看到剛上傳的_demo-0.0.1.tar.gz_包spa

1.3.1 pip

在本地環境中, 可使用 pipindex-url 參數來訪問 pypiserver 上的Python包:code

# 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. 相關資源

相關文章
相關標籤/搜索