名前 | 説明 |
---|---|
バージョン | 2.2.0 |
日付: | 2024-09-15 |
ソース | https://github.com/pypiserver/pypiserver |
ピピ | https://pypi.org/project/pypiserver/ |
テスト | https://github.com/pypiserver/pypiserver/actions |
メンテナー | @ankostis 、 @mplanchard 、 @dee-me-tree-or-love 、 @pawamoy 、新しい人?私たちは新しいメンテナーのためにオープンです! #397 |
ライセンス | zlib/libpng + mit |
コミュニティ | https://pypiserver.zulipchat.com |
ヒント
議論に手を差し伸べるか、 Zulipで私たちとチャット
Pypiserverは、 PIPまたはEasy_Install用の最小限のPYPI互換サーバーです。ボトルに基づいており、通常のディレクトリのパッケージを提供しています。ホイール、BDIST、卵、およびそれに付随するPGP署名は、 PIP 、 SetUptools 、 Twine 、 Pypi-Uploader 、またはSCPにコピーするだけでアップロードできます。
注記
Pypiを動力とする公式のソフトウェアは倉庫です。ただし、Warehouseはpypi.org独自のソフトウェアになるためにかなり専門的であり、他のコンテキストでは使用しないでください。特に、独自のパッケージを提供したいユーザーがカスタムパッケージインデックスとして公式に使用することはサポートされていません。
PypiserverはPypiと同じインターフェイスを実装し、 PIPやTwineなどの標準的なPythonパッケージングツールをPypiと同じようにパッケージインデックスとして対話し、実行中のインデックスサーバーを簡単に取得しやすくします。
目次
Pypiserverは、 Python 3.6+およびPypy3で動作します。
古いPythonバージョンは引き続き機能する可能性がありますが、テストされていません。
Legacy Pythonバージョンには、 Pypiserver-1.Xシリーズを使用してください。これらは正式にサポートされておらず、バグフィックスや新機能を受け取っていないことに注意してください。
ヒント
以下のコマンドは、POSIXシェルを備えたUNIXのようなオペレーティングシステムで機能します。 「〜」文字は、ユーザーのホームディレクトリに拡張されます。
Windowsを使用している場合は、「Windowsカウンターパート」を使用する必要があります。同じことが、このドキュメントの残りの部分にも当てはまります。
このコマンドでPypiserverをインストールします
pip install pypiserver # Or: pypiserver[passlib,cache]
mkdir ~ /packages # Copy packages into this directory.
[!ヒント]代替インストール方法も参照してください
一部のパッケージを〜/Packagesフォルダーにコピーしてから、 Pypiserverをアップして実行します
pypi-server run -p 8080 ~ /packages & # Will listen to all IPs.
クライアントコンピューターから、これを入力します
# Download and install hosted packages.
pip install --extra-index-url http://localhost:8080/simple/ ...
# or
pip install --extra-index-url http://localhost:8080 ...
# Search hosted packages.
pip search --index http://localhost:8080 ...
# Note that pip search does not currently work with the /simple/ endpoint.
[!ヒント]退屈なタイピングを避けるためのクライアント側の構成も参照してください。
CMDラインにPypi-Server -Hを入力して、詳細な使用法を印刷する
usage: pypi-server [-h] [-v] [--log-file FILE] [--log-stream STREAM]
[--log-frmt FORMAT] [--hash-algo HASH_ALGO]
[--backend {auto,simple-dir,cached-dir}] [--version]
{run,update} ...
start PyPI compatible package server serving packages from PACKAGES_DIRECTORY. If PACKAGES_DIRECTORY is not given on the command line, it uses the default ~/packages. pypiserver scans this directory recursively for packages. It skips packages and directories starting with a dot. Multiple package directories may be specified.
positional arguments:
{run,update}
run Run pypiserver, serving packages from
PACKAGES_DIRECTORY
update Handle updates of packages managed by pypiserver. By
default, a pip command to update the packages is
printed to stdout for introspection or pipelining. See
the `-x` option for updating packages directly.
optional arguments:
-h, --help show this help message and exit
-v, --verbose Enable verbose logging; repeat for more verbosity.
--log-file FILE Write logging info into this FILE, as well as to
stdout or stderr, if configured.
--log-stream STREAM Log messages to the specified STREAM. Valid values are
stdout, stderr, and none
--log-frmt FORMAT The logging format-string. (see `logging.LogRecord`
class from standard python library)
--hash-algo HASH_ALGO
Any `hashlib` available algorithm to use for
generating fragments on package links. Can be disabled
with one of (0, no, off, false).
--backend {auto,simple-dir,cached-dir}
A backend implementation. Keep the default 'auto' to
automatically determine whether to activate caching or
not
--version show program's version number and exit
Visit https://github.com/pypiserver/pypiserver for more information
CMDラインにPypi-Server run -Hを入力して、詳細な使用法を印刷する
usage: pypi-server run [-h] [-v] [--log-file FILE] [--log-stream STREAM]
[--log-frmt FORMAT] [--hash-algo HASH_ALGO]
[--backend {auto,simple-dir,cached-dir}] [--version]
[-p PORT] [-i HOST] [-a AUTHENTICATE]
[-P PASSWORD_FILE] [--disable-fallback]
[--fallback-url FALLBACK_URL]
[--health-endpoint HEALTH_ENDPOINT] [--server METHOD]
[-o] [--welcome HTML_FILE] [--cache-control AGE]
[--log-req-frmt FORMAT] [--log-res-frmt FORMAT]
[--log-err-frmt FORMAT]
[package_directory [package_directory ...]]
positional arguments:
package_directory The directory from which to serve packages.
optional arguments:
-h, --help show this help message and exit
-v, --verbose Enable verbose logging; repeat for more verbosity.
--log-file FILE Write logging info into this FILE, as well as to
stdout or stderr, if configured.
--log-stream STREAM Log messages to the specified STREAM. Valid values are
stdout, stderr, and none
--log-frmt FORMAT The logging format-string. (see `logging.LogRecord`
class from standard python library)
--hash-algo HASH_ALGO
Any `hashlib` available algorithm to use for
generating fragments on package links. Can be disabled
with one of (0, no, off, false).
--backend {auto,simple-dir,cached-dir}
A backend implementation. Keep the default 'auto' to
automatically determine whether to activate caching or
not
--version show program's version number and exit
-p PORT, --port PORT Listen on port PORT (default: 8080)
-i HOST, -H HOST, --interface HOST, --host HOST
Listen on interface INTERFACE (default: 0.0.0.0)
-a AUTHENTICATE, --authenticate AUTHENTICATE
Comma-separated list of (case-insensitive) actions to
authenticate (options: download, list, update;
default: update).
Any actions not specified are not authenticated, so
to authenticate downloads and updates, but allow
unauthenticated viewing of the package list, you would
use:
pypi-server -a 'download, update' -P
./my_passwords.htaccess
To disable authentication, use:
pypi-server -a . -P .
See the `-P` option for configuring users and
passwords.
Note that when uploads are not protected, the
`register` command is not necessary, but `~/.pypirc`
still needs username and password fields, even if
bogus.
-P PASSWORD_FILE, --passwords PASSWORD_FILE
Use an apache htpasswd file PASSWORD_FILE to set
usernames and passwords for authentication.
To allow unauthorized access, use:
pypi-server -a . -P .
--disable-fallback Disable the default redirect to PyPI for packages not
found in the local index.
--fallback-url FALLBACK_URL
Redirect to FALLBACK_URL for packages not found in the
local index.
--health-endpoint HEALTH_ENDPOINT
Configure a custom liveness endpoint. It always
returns 200 Ok if the service is up. Otherwise, it
means that the service is not responsive.
--server METHOD Use METHOD to run the server. Valid values include
paste, cherrypy, twisted, gunicorn, gevent, wsgiref,
and auto. The default is to use "auto", which chooses
one of paste, cherrypy, twisted, or wsgiref.
-o, --overwrite Allow overwriting existing package files during
upload.
--welcome HTML_FILE Use the contents of HTML_FILE as a custom welcome
message on the home page.
--cache-control AGE Add "Cache-Control: max-age=AGE" header to package
downloads. Pip 6+ requires this for caching.AGE is
specified in seconds.
--log-req-frmt FORMAT
A format-string selecting Http-Request properties to
log; set to '%s' to see them all.
--log-res-frmt FORMAT
A format-string selecting Http-Response properties to
log; set to '%s' to see them all.
--log-err-frmt FORMAT
A format-string selecting Http-Error properties to
log; set to '%s' to see them all.
Pypi-Serverアップデートの詳細
usage: pypi-server update [-h] [-v] [--log-file FILE] [--log-stream STREAM]
[--log-frmt FORMAT] [--hash-algo HASH_ALGO]
[--backend {auto,simple-dir,cached-dir}] [--version]
[-x] [-d DOWNLOAD_DIRECTORY] [-u]
[--blacklist-file IGNORELIST_FILE]
[package_directory [package_directory ...]]
positional arguments:
package_directory The directory from which to serve packages.
optional arguments:
-h, --help show this help message and exit
-v, --verbose Enable verbose logging; repeat for more verbosity.
--log-file FILE Write logging info into this FILE, as well as to
stdout or stderr, if configured.
--log-stream STREAM Log messages to the specified STREAM. Valid values are
stdout, stderr, and none
--log-frmt FORMAT The logging format-string. (see `logging.LogRecord`
class from standard python library)
--hash-algo HASH_ALGO
Any `hashlib` available algorithm to use for
generating fragments on package links. Can be disabled
with one of (0, no, off, false).
--backend {auto,simple-dir,cached-dir}
A backend implementation. Keep the default 'auto' to
automatically determine whether to activate caching or
not
--version show program's version number and exit
-x, --execute Execute the pip commands rather than printing to
stdout
-d DOWNLOAD_DIRECTORY, --download-directory DOWNLOAD_DIRECTORY
Specify a directory where packages updates will be
downloaded. The default behavior is to use the
directory which contains the package being updated.
-u, --allow-unstable Allow updating to unstable versions (alpha, beta, rc,
dev, etc.)
--blacklist-file IGNORELIST_FILE, --ignorelist-file IGNORELIST_FILE
Don't update packages listed in this file (one package
name per line, without versions, '#' comments
honored). This can be useful if you upload private
packages into pypiserver, but also keep a mirror of
public packages that you regularly update. Attempting
to pull an update of a private package from `pypi.org`
might pose a security risk - e.g. a malicious user
might publish a higher version of the private package,
containing arbitrary code.
コマンドラインで常にPYPI URLを指定するのは少し面倒です。 Pypiserverは、 pip/easy_installをpypi.orgインデックスにリクエストしたパッケージを持っていない場合、常にローカルPypiインデックスを使用するように構成することをお勧めします。
PIPコマンドの場合、これは環境変数を設定することで実行できます。
export PIP_EXTRA_INDEX_URL=http://localhost:8080/simple/
または、 〜/.pip/pip.confに次の行を追加します
[global]
extra-index-url = http://localhost:8080/simple/
注記
HTTPSなしでリモートURLにPypiserverをインストールした場合、 PIPから「信頼できない」警告が表示され、 -Trusted-Hostオプションを追加するように促します。このオプションを構成ファイルまたは環境変数に永久に含めることもできます。
Easy_installコマンドの場合、次の構成を〜/.pydistutils.cfgで設定できます
[easy_install]
index_url = http://localhost:8080/simple/
パッケージをサーバーのフォルダーに直接コピーする代わりに( SCPを使用する)、タスクにはPython Setup.pyアップロードなどのPythonツールを使用できます。その場合、 Pypiserverはアップロード要求を認証する責任があります。
注記
アップロードをパスワード保護することを強くお勧めします!
アップロード(イントラネットなど)の認証を無効にすることができます。怠zyなセキュリティの決定を避けるために、 -Pおよび-Aオプションのヘルプをお読みください。
まず、 Passlibモジュールがインストールされていることを確認してください( Passlib > = 1.6が必要であることに注意してください)。
pip install passlib
このコマンドで少なくとも1人のユーザー/パスワードペアを使用してApache HTPassWDファイルを作成します(パスワードの入力を求められます)
htpasswd -sc htpasswd.txt < some_username >
ヒント
Windowsの下でhtpasswd
CMDを実行するための質問を読んでください。または、セキュリティの観点からは、内部サービス(まだ「悪い」」であるために気にしない偽のパスワードがある場合は...このpublicを使用できます。サービス
ヒント
APIを介してPypiserverにアクセスする場合、 Auther構成フラグを介して代替認証方法が利用可能です。カスタム認証を提供するために、ブール波を返す呼び出し可能なものをPypiserver構成に渡すことができます。たとえば、python-pamを使用して認証するようにpypiserverを構成するには
import pam
pypiserver.default_config(auther=pam.authenticate)
詳細については、 Using Ad-hoc authentication providers
ご覧ください。
-pオプションでサーバーを1回だけ再起動する必要があります(ただし、ユーザー/パスワードペアは後で追加または更新できます)
./pypi-server run -p 8080 -P htpasswd.txt ~ /packages &
クライアント側で、同様のコンテンツを持つ〜/.pypircファイルを編集または作成します。
[distutils]
index-servers =
pypi
local
[pypi]
username: < your_pypi_username >
password: < your_pypi_passwd >
[local]
repository: http://localhost:8080
username: < some_username >
password: < some_passwd >
次に、Python-Projectのディレクトリ内からアップロードしたい場合は、次のコマンドを発行します。
python setup.py sdist upload -r local
ディスクにパスワードを保存することを避けるため、クリアテキストでは、次のとおりです。
そのような-Rオプションを使用してレジスタSetUptoolsのコマンドを使用します
python setup.py sdist register -r local upload -r local
2つのステップで手順を破るTwineライブラリを使用します。さらに、PGP署名のファイルに署名し、生成された.ASCファイルをPypiserverにアップロードすることをサポートしています::
twine upload -r local --sign -identity user_name ./foo-1.zip
バージョン1.2.5から始めて、 main
、各開発、アルファ、またはベータリリース、および各最終リリースへのプッシュごとに公式のDocker画像が構築されます。最新のフルリリースは常に最新のTagで利用可能になり、現在のmain
ブランチは常にTAG UnsStableで利用できます。
Dockerリポジトリで現在利用可能なタグを確認するには、いつでも確認できます。
Pypiserverの最新のリリースをDockerと実行するには、単純に
docker run pypiserver/pypiserver:latest run
これにより、コンテナ内の/データ /パッケージディレクトリからパッケージを提供するPypiserverが開始され、コンテナポート8080で聴きます。
コンテナは、常に8080になる内部コンテナポート( -P )を除き、通常のPypi -Server実行可能ファイルと同じ引数をすべて取ります。
もちろん、コンテナを実行するだけでは面白くありません。ホストのポート80をコンテナのポート8080にマッピングするには::
docker run -p 80:8080 pypiserver/pypiserver:latest run
これで、WebブラウザでLocalHost:80でPypiserverにアクセスできます。
ホストのディレクトリからパッケージを提供するには、eg〜 /packages
docker run -p 80:8080 -v ~ /packages:/data/packages pypiserver/pypiserver:latest run
ローカル.htpasswdファイルに対して認証する::
docker run -p 80:8080 -v ~ /.htpasswd:/data/.htpasswd pypiserver/pypiserver:latest run -P .htpasswd packages
また、ComposeFileを使用してDockerサービスとして実行するPypiserverを指定することもできます。 composefileの例は、 docker-compose.yaml
として提供されます
以下の方法を試すときは、最初に次のコマンドを使用して、以前のバージョンのPypiserverがすでに存在するかどうかを確認し、(オプションで)それらをアンインストールします::
# VERSION-CHECK: Fails if not installed.
pypi-server --version
# UNINSTALL: Invoke again until it fails.
pip uninstall pypiserver
Pypiの最新バージョンがプレリリースである場合、 PIPの- PREオプションを使用する必要があります。既存のインストールを更新するには、それを--ignore-installed
と組み合わせます
pip install pypiserver --pre -I
次のコマンドを使用して、最新のPypiserverをGitHubから直接インストールすることもできます。
pip install git+git://github.com/pypiserver/pypiserver.git
Pypi-Serverコマンドには、利用可能なパッケージの更新を検索する更新コマンドがあります。 Pypi.orgで利用可能なパッケージと検索のパッケージディレクトリをスキャンします。その他のオプションがなければ、 Pypi-Serverアップデートは、各パッケージの最新バージョンを取得するために実行する必要があるコマンドのリストを印刷するだけです。出力は次のように見えます:
$ ./pypi-server update
checking 106 packages for newer version
.........u.e...........e..u.............
.....e..............................e...
..........................
no releases found on pypi for PyXML, Pymacs, mercurial, setuptools
# update raven from 1.4.3 to 1.4.4
pip -q install --no-deps --extra-index-url https://pypi.org/simple/ -d /home/ralf/packages/mirror raven==1.4.4
# update greenlet from 0.3.3 to 0.3.4
pip -q install --no-deps --extra-index-url https://pypi.org/simple/ -d /home/ralf/packages/mirror greenlet==0.3.4
Pypiで利用可能なバージョンをチェックした後、最初に各パッケージに単一の文字を印刷します。ドット(。)は、パッケージが最新であることを意味し、 「u」はパッケージを更新できることを意味し、 「e」とは、Pypiのリリースのリストが空です。その後、1つのパッケージの更新に使用できるPIPコマンドラインが表示されます。それをコピーして貼り付けるか、 Pypi -Server Update -Xを実行して、これらのコマンドを実際に実行します。ただし、機能するにはPIPをインストールする必要があります。
追加の-Uオプションを指定すると、アルファ、ベータ候補、リリース候補もダウンロードできます。このオプションがなければ、これらのリリースは考慮されません。
重要
デフォルトでは、 Pypiserverは、着信HTTP要求が発生するたびにパッケージディレクトリ全体をスキャンします。これは少数のパッケージでは問題ではありませんが、数千のパッケージを提供する際に顕著なスローダウンを引き起こします。
この問題に遭遇した場合、Pypiserverのディレクトリキャッシュ機能を有効にすることで、重要なスピードアップを得ることができます。唯一の要件は、ウォッチドッグパッケージをインストールすることです。または、キャッシュエクストラオプションを指定して、 Pypiserverのインストール中にインストールできます::
pip install pypiserver[cache]
WebServerの組み込みキャッシング機能を使用して、追加のスピードアップを取得できます。たとえば、以下のBehind a reverse proxy
で説明するようにnginx
逆プロキシとして使用している場合、キャッシュを簡単に有効にすることができます。たとえば、Nginxが最大10ギガバイトのデータを最大1時間キャッシュできるようにするには::
proxy_cache_path /data/nginx/cache
levels=1:2
keys_zone=pypiserver_cache:10m
max_size=10g
inactive=60m
use_temp_path=off ;
server {
# ...
location / {
proxy_cache pypiserver_cache ;
proxy_pass http://localhost:8080 ;
}
}
ヒント
WebServerキャッシングを使用することは、リクエストボリュームが高い場合に特に役立ちます。 Nginxキャッシングを使用して、実際のPypiserverのインストールは、ピーク負荷で1000以上のパッケージダウンロード/分を簡単にサポートできました。
システムの起動時にPypiserverの自動開始を処理するためのさまざまなオプションがあります。最も一般的な2つは、Linux SystemsのSystemDおよびスーパーバイザーです。 Windowsのサービスを作成するためのスクリプトを使用して、 NSSMなどのサードパーティツールがなければ簡単な作業ではありません。
SystemDは、ほとんどの最新のLinuxシステムにデフォルトでインストールされているため、Pypiserverプロセスを管理するための優れたオプションです。 SystemDの例の構成ファイルは以下に示すことができます
[Unit]
Description=A minimal PyPI server for use with pip/easy_install.
After=network.target
[Service]
Type=simple
# systemd requires absolute path here too.
PIDFile=/var/run/pypiserver.pid
User=www-data
Group=www-data
ExecStart=/usr/local/bin/pypi-server run -p 8080 -a update,download --log-file /var/log/pypiserver.log -P /etc/nginx/.htpasswd /var/www/pypi
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
WorkingDirectory=/var/www/pypi
TimeoutStartSec=3
RestartSec=5
[Install]
WantedBy=multi-user.target
パスを調整し、このファイルをPypiserver.ServiceとしてSystemD/System Directoryに追加すると、 SystemCtlを使用したPypiserverプロセスの管理が可能になります。
SystemDに関するより有用な情報は、https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-unitsにあります。
スーパーバイザーは、純粋なPythonパッケージであるという利点があるため、プロセス管理に優れたクロスプラットフォームサポートを提供します。スーパーバイザーの例の構成ファイルを以下に示します
[program:pypi]
command=/home/pypi/pypi-venv/bin/pypi-server run -p 7001 -P /home/pypi/.htpasswd /home/pypi/packages
directory=/home/pypi
user=pypi
autostart=true
autorestart=true
stderr_logfile=/var/log/pypiserver.err.log
stdout_logfile=/var/log/pypiserver.out.log
そこから、プロセスはsupervisorctlを使用して監督を介して管理できます。
Windowsの場合、https://nssm.ccからnssmをダウンロードして、プログラムファイルなどの目的の場所に拡張します。 win32
またはwin64
使用するかどうかを決定し、そのexe
環境PATH
に追加します。
start_pypiserver.batを作成します
pypi-server run -p 8080 C: P ath T o P ackages &
ヒント
サービスを作成する前に、最初に実行してバッチファイルをテストします。サーバーにリモートでアクセスし、パッケージをインストールできることを確認してください。可能であれば、トラブルシューティングではないにしても、できる限り続行してください。これにより、NSSMをミックスに追加する前に、サーバーが機能することを保証します。
コマンドプロンプトから
nssm install pypiserver
このコマンドは、NSSM GUIアプリケーションを起動します
Path: C: P ath T o s tart_pypiserver.bat
Startup directory: Auto generates when selecting path
Service name: pypiserver
より多くのタブがありますが、それが基本的なセットアップです。サービスが特定のログイン資格情報を使用して実行する必要がある場合は、[ログオン]タブにこれらの資格情報を入力するようにしてください。
サービスを開始します
nssm start pypiserver
ヒント
その他の便利なコマンド
nssm --help
nssm stop < servicename >
nssm restart < servicename >
nssm status < servicename >
詳細については、https://nssm.ccをご覧ください
多くのWSGIサーバーをサポートするボトルWebサーバーなど、貼り付け、チェリー、ツイスト、 WSGiref (Pythonの一部)。 - サーバーフラグを使用して選択します。
次のインタラクティブコードを使用して、サポートされているすべてのWSGIサーバーを表示できます
>> > from pypiserver import bottle
>> > list ( bottle . server_names . keys ())
[ 'cgi' , 'gunicorn' , 'cherrypy' , 'eventlet' , 'tornado' , 'geventSocketIO' ,
'rocket' , 'diesel' , 'twisted' , 'wsgiref' , 'fapws3' , 'bjoern' , 'gevent' ,
'meinheld' , 'auto' , 'aiohttp' , 'flup' , 'gae' , 'paste' , 'waitress' ]
上記のサーバーがニーズと一致しない場合は、サーバーを起動せずに内部WSGI-APPを返すPypiserver:App()メソッドのみを呼び出します。その後、好きなWSGIサーバーに送信できます。 APIセクションの使用もお読みください。
以下にいくつかの例を示します。詳細については、ボトルサイトをご覧ください。
Pypiserverでapache2を使用するには、ボトルのドキュメントで説明されているように、 mod_wsgiを使用することを好みます。
注記
代わりにmod_proxyを使用することを選択した場合は、プレフィックスパスの問題にぶつかる可能性があることに注意してください(#155を参照)。
次のApache構成をトップレベルのスコープに適応して配置するか、 <VirtualHost>
(Thomas Waldmannが貢献した)内側に配置します。
WSGIScriptAlias / /yoursite/wsgi/pypiserver-wsgi.py
WSGIDaemonProcess pypisrv user=pypisrv group=pypisrv umask=0007
processes=1 threads=5 maximum-requests=500
display-name=wsgi-pypisrv inactivity-timeout=300
WSGIProcessGroup pypisrv
WSGIPassAuthorization On # Required for authentication (https://github.com/pypiserver/pypiserver/issues/288)
< Directory /yoursite/wsgi >
Require all granted
< /Directory >
または、古いapache <2.4を使用している場合、最後の部分をこれに置き換えます::
< Directory /yoursite/wsgi >
Order deny,allow
Allow from all
< /Directory >
次に、 /yoursite/cfg/ pypiserver.wsgiファイルを作成し、 wsgidaemonprocessディレクティブのユーザーとグループ(例のpypisrv:pypisrv )が読み取り許可を持っていることを確認してください。
import pypiserver
conf = pypiserver . default_config (
root = "/yoursite/packages" ,
password_file = "/yoursite/htpasswd" , )
application = pypiserver . app ( ** conf )
[!tip] virtualenvにpypiserverをインストールした場合は、 mod_wsgiの指示に従って、上記のPythonコードを次のようにプレイします
import site site . addsitedir ( '/yoursite/venv/lib/pythonX.X/site-packages' )
注記
セキュリティ上の理由から、ディレクトリディレクティブは、 WSGIスタートアップスクリプトを保持しているディレクトリへのアクセスを単独で付与することに注意してください。他に何もありません。
注記
ApacheでHTTPSサポートを有効にするには、SSLを使用するWSGI構成を含むディレクティブを構成します。
次のコマンドは、 Gunicornを使用してPypiserverを開始します
gunicorn -w4 ' pypiserver:app(root="/home/ralf/packages") '
または複数の根を使用する場合
gunicorn -w4 ' pypiserver:app(root=["/home/ralf/packages", "/home/ralf/experimental"]) '
貼り付けにより、異なるURLパスで複数のWSGIアプリケーションを実行できます。したがって、異なるパスで異なるパッケージセットを提供することができます。
次の例Paste.iniを使用して、異なるパスで安定した不安定なパッケージを提供できます
[composite:main]
use = egg:Paste#urlmap
/unstable/ = unstable
/ = stable
[app:stable]
use = egg:pypiserver#main
root = ~ /stable-packages
[app:unstable]
use = egg:pypiserver#main
root = ~ /stable-packages
~ /unstable-packages
[server:main]
use = egg:gunicorn#main
host = 0.0.0.0
port = 9000
workers = 5
accesslog = -
注記
これが機能するために、さらに依存関係をインストールする必要があります::
pip install paste pastedeploy gunicorn pypiserver
その後、サーバーは開始できます
gunicorn_paster paste.ini
逆プロキシの後ろにPypiserverも実行できます。
nginx構成を拡張します
upstream pypi {
server pypiserver.example.com:12345 fail_timeout=0 ;
}
server {
server_name myproxy.example.com ;
location / {
proxy_set_header Host $host : $server_port ;
proxy_set_header X-Forwarded-Proto $scheme ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_pass http://pypi ;
}
}
Pypiserver 1.3の時点では、Reverse Proxy構成のX-Forwarded-Host
Headerを使用して、ベースURLの変更を有効にすることもできます。たとえば、サーバー上の特定のパスの下でPypiserverをホストしたい場合
upstream pypi {
server localhost:8000 ;
}
server {
location /pypi/ {
proxy_set_header X-Forwarded-Host $host : $server_port /pypi ;
proxy_set_header X-Forwarded-Proto $scheme ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_pass http://pypi ;
}
}
逆プロキシを使用することは、HTTPSの後ろにPypiserverを取得するための好ましい方法です。たとえば、 nginx
を使用して、自動HTTPリダイレクトを使用して、ポート443のHTTPSの後ろにPypiserverを置くには
upstream pypi {
server localhost:8000 ;
}
server {
listen 80 default_server ;
server_name _ ;
return 301 https:// $host$request_uri ;
}
server {
listen 443 ssl ;
server_name pypiserver.example.com ;
ssl_certificate /etc/star.example.com.crt ;
ssl_certificate_key /etc/star.example.com.key ;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ;
ssl_ciphers HIGH: ! aNULL: ! MD5 ;
location / {
proxy_set_header Host $host : $server_port ;
proxy_set_header X-Forwarded-Proto $scheme ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_pass http://pypi ;
}
}
ヒント
詳細については、NginxのHTTPSドキュメントをご覧ください。
証明書を取得して最新の状態に保つことは、たとえば、CertBotとLetsEncryptを使用して、最新の状態に保つことができます。
Docker Composeを使用して自動HTTPリダイレクトを使用して、Traefikを使用してポート443のHTTPSの後ろにPypiserverを置くこともできます。詳細については、提供されたDocker-Compose.ymlの例をご覧ください。
Ad-Hoc Authentication-Providersを有効にしたり、ボトルの外でボトルでサポートされていないWSGIサーバーを使用するには、APIを介してPypiserverを起動する必要があります。
Pypiserverを構成するためのメインエントリポイントは、Pypiserver:App()関数です。この関数は、あなたが私のwsgi-serverに送信する内部wsgi-appを返します。
すべてのpypiserverを取得するには:app()キーワードとその説明、function pypiserver:default_config()をお読みください
最後に、構成されたアプリでWSGIサーバーを起動するには、ボトル:Run(App、Host、Port、Server)関数を呼び出します。 Pypiserverには、独自のボトルのコピーが付いていることに注意してください。それを使用するには、そのようにインポート: Pypiserver Import Bottleから
Pypiserver:App()関数のAutherキーワードは、APIを使用してのみ設定される可能性があります。これは、特定のリクエストのユーザー名とパスワードを渡すとブール値を返す可能性があります。
たとえば、UNIXの下の/etc /passwdファイルに基づいてユーザーを認証するには、次の手順に従って、そのような決定をPython-Pamライブラリに委任することができます。
Python-Pamモジュールがインストールされていることを確認してください
pip install python-pam
これらの線に沿ってPython-Scriptを作成します
$ cat > pypiserver-start.py
import pypiserver
from pypiserver import bottle
import pam
app = pypiserver.app(root= ' ./packages ' , auther=pam.authenticate)
bottle.run(app=app, host= ' 0.0.0.0 ' , port=80, server= ' auto ' )
[Ctrl+ D]
Python-Scriptを起動Pypiserverに呼び出します
python pypiserver-start.py
注記
Python-Pamモジュールでは、 /etc /Shadowファイルへの読み取りアクセスが必要です。 PypiserverがShadow Groupに登場するユーザーを追加すると、このようなコマンドがあります: Sudo Usermod -A -G Shadow Pypy -User 。
組み込みデバイス用のMicropythonインタープリターは、モジュールUpip.pyでパッケージをインストールできます。モジュールは、特殊なJSONエンドポイントを使用して、パッケージ情報を取得します。このエンドポイントは、Pypiserverによってサポートされています。
MicropythonのUnixポートでテストできます
cd micropython
ports/unix/micropython -m tools.upip install -i http://my-server:8080 -p /tmp/mymodules micropython-foobar
埋め込まれたデバイスのREPLからパッケージをインストールすると、次の方法で機能します。
import network
import upip
sta_if = network . WLAN ( network . STA_IF )
sta_if . active ( True )
sta_if . connect ( '<your ESSID>' , '<your password>' )
upip . index_urls = [ "http://my-server:8080" ]
upip . install ( "micropython-foobar" )
Micropython-Packagingの詳細については、https://docs.micropython.org/en/latest/reference/packages.htmlをご覧ください
Pypiserverは、 /Healthのデフォルトのヘルスエンドポイントを提供します。サービスがアップしている場合、常に200 OKを返します。それ以外の場合は、サービスが応答しないことを意味します。
さらに、 Pypiserverを使用すると、ユーザーはヘルスエンドポイントをカスタマイズできます。英数字、ハイフン、フォワードスラッシュ、アンダースコアが許可されており、エンドポイントは既存のルートと重複してはなりません。有効な例: /Healthz 、 /health /live-1 、 /api_health 、 /action /health
-health-endpoint引数でpypiserverを実行します:
pypi-server run --health-endpoint /action/health
import pypiserver
from pypiserver import bottle
app = pypiserver . app ( root = "./packages" , health_endpoint = "/action/health" )
bottle . run ( app = app , host = "0.0.0.0" , port = 8080 , server = "auto" )
curl http:// localhost:8080/action/healthをお試しください
リポジトリのコピーを作成するには、使用します
git clone https://github.com/pypiserver/pypiserver.git
cd pypiserver
上記のフォルダーで使用される後の変更を受信するには:
git pull
重要
Pypiserverは、 PYPIに見られるように完全なAPIを実装していません。 Easy_install 、 PIPのインストール、および検索作業を作成するのに十分なだけ実装されています。
次の制限が既知です:
見つけた他のバグには、GitHubのバグトラッカーを使用してください。
他にも多くのプロジェクトがあります。これにより、独自のPypiサーバーを実行できます。 Pypiserverが機能しない場合、以下は最も人気のある選択肢の1つです。
devpi-server:包括的なGithubスタイルのPypiインデックスサーバーとパッケージングメタツールの一部、信頼できる高速Pypi.orgキャッシュサーバー。 (バージョン:2.1.4、アクセス日:2015年8月3日)
これをチェックしてください質問:自分のピピを転がす方法
これらのプロジェクトはかつてPypiserverに代わるものでしたが、現在は維持されていないかアーカイブされています。
PIP2PI PIP要件からPYPI互換のローカルフォルダーを構築するシンプルなCMDラインツール
Flask-Pypi-Proxyカスタムパッケージのアップロードも可能にするPYPIのプロキシ。
Pypiserverがインデックスサーバーとして使用するための直接的な代替手段ではありませんが、以下は次のような関連するソフトウェアプロジェクトのリストです。
Pypi-Uploader:最初にローカルに保存することなく、PypiserverにパッケージをPypiserverにアップロードするコマンドラインユーティリティ。
Twine:PypiまたはPypiserverと対話するためのコマンドラインユーティリティ。
倉庫:Pypi自体を動かすソフトウェア。一般に、エンドユーザーが実行することを意図していません。
Pypiserverには、 MITライセンスの下で利用可能なボトルのコピーが含まれており、残りの部分はZLIB/LIBPNGライセンスの下で配布されます。 license.txtファイルを参照してください。