キャッシュなどの目的で、
ローカル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()

以上。