docker+devpi を使用してローカル pypi ソースをビルドする方法

docker+devpi を使用してローカル pypi ソースをビルドする方法

以前、開発で頻繁に pip ダウンロードを使用する必要がありました。pip ソースを国産ソースに変更しましたが、速度に満足できませんでした。さらに重要なのは、統合テスト環境がオフラインだったことです。統合テスト環境で開発するには、当然、独自のローカル pip ソースを構築する必要がありました。 devpi を使う前は pip2pi を使用していましたが、オフライン環境での tox コマンドが常に失敗するバグがあったため、最終的に devpi を使用して pip ソースをビルドしました。ここでは便利で高速な Docker デプロイメントが使用されています。誤ってクラッシュした場合は、Docker コンテナを再実行するだけです。お使いの環境に Docker がインストールされていない場合は、Docker コミュニティのドキュメント「Docker のインストール」など、インストール方法を自分で検索できます。 CentOSユーザーの場合は、次の方法でインストールできます。

sudo yum アップデート
sudo yum -y dockerをインストールします
sudo systemctl でdockerを有効にする
sudo systemctl dockerを起動します

次に、dockerを使用してPythonのローカルイメージソースをデプロイします。docker hubにある既存のイメージを使用できます。
muccg/devpi この画像

# devpiサーバ管理者パスワードを設定する DEVPI_PASSWORD = 123

mkdir -p /src/docker/devpi
mkdir /tmp/wheelhouse

docker run -d --name devpi \
  --publish 3141:3141 \
  --volume /tmp/ホイールハウス:/ホイールハウス
  --volume /srv/docker/devpi:/data \
  --env=DEVPI_PASSWORD=$DEVPI_PASSWORD \
  --常に再起動\
  muccg/docker-devpi

次に、必要な wheel パッケージをローカルにダウンロードします。 requirements.txt ファイルの内容は、必要な Python ライブラリのリストです。

pip ホイール --wheel-dir /tmp/wheelhouse -r requirements.txt

pip からダウンロードしたライブラリがすでに wheel パッケージである場合、ファイルは /tmp/wheelhouse に直接配置されます。
tar パッケージの場合、pip は最初に wheel パッケージをビルドしますが、これには時間がかかる場合があります。ダウンロードが完了すると、ホイールハウスの内容は次のようになります。

ll /tmp/ホイールハウス
合計 524K
-rwxrwxrwx 1 新人 新人 155K 4月6日 23:40 certifi-2019.3.9-py2.py3-none-any.whl
-rwxrwxrwx 1 新人 新人 131K 4月6日 23:40 chardet-3.0.4-py2.py3-none-any.whl
-rwxrwxrwx 1 新人 新人 58K 4月6日 23:40 idna-2.8-py2.py3-none-any.whl
-rwxrwxrwx 1 新人 新人 57K 4月6日 23:40 リクエスト-2.21.0-py2.py3-none-any.whl
-rwxrwxrwx 1 新人 新人 116K 4月6日 23:40 urllib3-1.24.1-py2.py3-none-any.whl

ダウンロードが完了したら、ローカル環境にdevpiクライアントがインストールされている場合は、ホイールパッケージを直接アップロードできますが、すでに

wheelhouseフォルダーをコンテナに取り付けるか、コンテナ内で直接操作することができます

# コンテナに入る docker exec -it -u root devpi bash

# ログインして devpi をアップロードします。http://<host_ip>:3141/root/public --set-cfg を使用します。
devpi ログイン ルート 123
devpi アップロード --from-dir /wheelhouse

アップロードが完了したら、 http://<host_ip>:3141を使用して、pip ローカル ソース サーバーのステータスを表示できます。

一時的な使用には、pip installの--indexおよび--trusted-hostオプションを使用できます。

pip インストール --index http://<host_ip>:3141/root/public/+simple/ \
      --trusted-host <ホストIP>

または、pip.confファイルを変更して永続的に使用する

# vim ~/.pip/pip.conf
[グローバル]
index_url = http://<host_ip>:3141/root/public/+simple/
信頼できるホスト = <ホストIP>
[検索]
インデックス = http://<host_ip>:3141/root/public/

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Python パッケージング モジュール ホイールを使用して Python パッケージを PyPI に公開する方法
  • Pythonでpypiにパッケージをアップロードする方法
  • Docker を使用して pypi プライベート リポジトリを構築する方法
  • pypiプライベート倉庫の構築プロセスの詳細な説明
  • 依存関係 pypiwin32 または pywin32-ctypes が見つからない pyinstaller パッケージング エラーに対する完璧なソリューション
  • Python パッケージを PyPI に公開し、whl ファイルを作成する方法
  • Python の自作パッケージで、pip を使用して pypi への送信を回避し、ローカル マシンにのみインストールします [推奨]
  • Doubanが提供する国内のpypiソースを使用する
  • Python がパッケージを Pypi にアップロードする (簡単なコード)
  • Python で pip を使用して PyPI 以外の公式サイトからサードパーティのライブラリをインストールする方法
  • 独自のモジュールをpypiにアップロードする方法

<<:  mysql バックアップ スクリプト mysqldump の使い方の詳細な説明

>>:  1 つの記事で Vuex を理解する

推薦する

CSS3 アドバンス LESS で星空アニメーションを実装するサンプルコード

この記事では、星空アニメーションを実現するための高度な CSS3 LESS のサンプルコードを次のよ...

IE6、IE7、IE8 で CSS3 の丸い角と影のスタイルをサポートする

CSS3 の角丸や影の効果を使ったページを作りたいのですが、IE ブラウザでは対応していません。こ...

Windows 10 での MySQL 8.0.16 のインストールと設定のチュートリアル

この記事では、参考までにMySQL 8.0.16のインストールと設定方法のグラフィックチュートリアル...

役に立つメタ設定方法(必読)

<meta name="viewport" content="...

Nginx プロキシを使用してインターネットを閲覧する方法

私は通常、Tomcatや他のアプリケーションのリバースプロキシとしてnginxを使用しています。実際...

Linux システムで .sh ファイルを実行する方法

Linux システムで .sh ファイルを実行する方法は 2 つあります。たとえば、ルート ディレク...

MySQL における EXISTS と IN の使用法の比較

1. 使用法: (1)EXISTSの使用 ucsc_project_batch a から、存在する場...

MySQL テーブルと列のコメントの概要

コードと同様に、テーブルや列にコメントを追加して、他のユーザーがその機能を理解できるようにすることが...

Centos での TCPWrappers アクセス制御の実装

1. TCP ラッパーの概要TCP Wrappers は TCP サービス プログラムを「ラップ」し...

PythonはデータベースMySQLの解凍バージョンのインストール構成に接続し、問題が発生しました

導入今日は Python でデータベースに接続する方法を学んだので、MySQL データベースをインス...

Alibaba Cloud ESC に MYSQL8.0 をインストールするチュートリアル

接続ツールを開きます。私はMobaXterm_Personal_12.1を使用します(公式サイトのダ...

JSON.stringify を使用する際に発生する循環参照の問題を解決する方法の詳細な説明

プログラマーが日常的に TypeScript/JavaScript 開発を行う場合、複雑な Java...

HTML ではスペースはどのように表現されますか (どのような意味ですか)?

Web 開発では、次のような文字によく遭遇します: &nbsp;これは実際には HTML が...

Linux userdel コマンドの使用法

1. コマンドの紹介userdel (ユーザー削除) コマンドは、ユーザー アカウントと関連ファイル...

Vue-cliフレームワークはタイマーアプリケーションを実装します

技術的背景このアプリケーションは vue-cli フレームワークを使用し、カスタム コンポーネント ...