devpiでPythonのPackageリポジトリを立てる手順
キャッシュなどの目的で、
ローカルPCにPythonのPackageリポジトリを立てる場合、
以下のような、いくつかの選択肢があるようです。
devpi | GitHub
https://github.com/devpi/devpi
pypiserver | GitHub
https://github.com/pypiserver/pypiserver
proxpi | GitHub
https://github.com/EpicWink/proxpi
このエントリではdevpiを使って、
ローカルPC上にPackageリポジトリを立てる手順
及び、devpiを使ったpackageのinstallとupload手順を説明します。
devpiのセットアップ(リポジトリの立て方)
まずはdevipをセットアップしてリポジトリとして使える状態にします。
以下のドキュメントを参考に手順を進めます。
Quickstart: running a pypi mirror on your laptop | devpi docs
https://devpi.net/docs/devpi/devpi/stable/+d/quickstart-pypimirror.html
Pythonの仮想環境を用意します。
mkdir ~/devpi && cd $_
python -m venv venv
用意した仮想環境に、devpiをインストールします。
source venv/bin/activate
pip install --upgrade pip
pip install devpi-server
pip install devpi-web
devpi-initで、リポジトリを初期化します。
既定では、Packageのリポジトリは ~/.devpi/server
配下に作られます。
devpi-init
supervisordの設定ファイルを生成します。
gen-config
配下に、設定ファイルが作成されます。
devpi-gen-config
supervisordをインストールします。 macosでhomebrewを使っている場合は、以下でインストールできます。
brew install supervisord
devpi-serverを起動します。
supervisord -c gen-config/supervisord.conf
終了させたい場合は、以下のようにshutdownします。
supervisorctl -c gen-config/supervisord.conf shutdown
Repositoryの状態は http://localhost:3141/
でブラウザから確認できます。
devpi経由でのpip install
次に、devpi経由で pip install
して、キャッシュされる様子を確認します。
simplejsonをインストールします。
pip install -i http://localhost:3141/root/pypi/ simplejson
インストールすると、~/.devpi/server
配下に、simplejsonがキャッシュされます。
以下のように確認出来るかと思います。
find ~/.devpi/server | grep simplejson
devpiへのpackageのupload
最後に、自分で作ったPackageをdevpiにuploadしてみます。
以下のドキュメントを参考に手順を進めます。
Quickstart: uploading, testing, pushing releases | https://devpi.net/docs/devpi/devpi/6.0/+d/quickstart-releaseprocess.html
ユーザの作成
devpi環境にユーザを作成します。
devpiのclientをインストールします。
pip install devpi-client
devpiにユーザを作成します。
devpi use http://localhost:3141
devpi user -c testuser password=123
http://localhost:3141/
からユーザが追加されていることが確認出来ます。
testuser側から root/pypi
のパッケージもinstallできるようにindexを付けておきます。
devpi login testuser --password=123
devpi index -c dev bases=root/pypi
※ devpiのクライアントの設定は ~/.devpi/client/current.json
に保持されます。
パッケージの作成
まずは、適当なPythonのPackageを作ります。
ここでは次のようなディレクトリ構成で、
- mypackage
- init.py
- setup.py
以下の内容のファイルを用意します。
mypackage/init.py
def hello():
print("hello")
setup.py
from setuptools import setup
setup(
name='mypackage',
version='0.0.1',
packages=['mypackage']
)
使用するrepositoryをtestuser/devに変更します。
devpi login testuser --password=123
devpi use testuser/dev
devpiにpackageをuploadします。
devpi upload
UploadしたPackageのinstall
UploadしたPackageは次のようにしてinstall出来ます。
-i
オプションでは、uploadした testuser/dev
を指しておきます。
pip install -i http://localhost:3141/testuser/dev mypackage
install後、次のようなコードでpackageが利用出来ることを確認します。
import mypackage
mypackage.hello()
以上。