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 を理解する

推薦する

MySQLはストアドプロシージャを使用して数百万のデータを素早く追加します。サンプルコード

序文インデックスを追加した場合と追加しなかった場合の違いを反映するには、数百万のデータを使用する必要...

MySQL エラー: 接続数が多すぎる場合の解決策

MySQLデータベースの接続が多すぎますこのエラーは明らかに、mysql_connect の後に m...

MySQL データベースのパフォーマンス最適化の概要

目次なぜ最適化するのですか? ?どこから始めますか? ?解決策は何ですか? ? ?どうやって選ぶ? ...

wavesurfer.js によるオーディオ波形描画の実装

1. レンダリングを見る進むを選択: 後方を選択: コードは次のとおりです(例): <テンプレ...

要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...

JavaScriptのプリコンパイルを見てみましょう(概要)

JSランニング三部作js実行コードは3つのステップに分かれています構文解析プリコンパイル解釈Jav...

CSSはインラインブロックのずれの問題を解決します

もうナンセンスじゃない、郵便番号HTML部分 <div class="positio...

MySQL query_cache_type パラメータと使用方法の詳細

MySQL クエリ キャッシュを設定する目的は次のとおりです。クエリ結果をキャッシュしておくと、次回...

CSS3で背景画像にカラーマスクを追加する方法

以前、開発中に背景レイヤーにカラーマスクを追加する必要のあるプロジェクトに遭遇しました。ここでは、背...

ズームインとズームアウトの閉じるボタンを実現する CSS (サンプル コード)

この効果はブラウザ ページで最もよく見られます。まずは効果の画像をご覧ください。 上の図に示すように...

fileReader 使用時の落とし穴と解決策

目次fileReader に関する落とし穴iOS における FileReader の落とし穴 (イメ...

Docker共通コマンドの詳しい解説 Study03

目次1. ヘルプコマンド2. ミラーコマンド3. コンテナコマンド1. ヘルプコマンド1. 現在のD...

MySQL でメタデータ ロックがブロックされている場所を確認する方法

MySQL でメタデータ ロックがブロックされている場所を確認する方法手順: 1. セッション1の実...

コピー&ペーストはパッケージングの敵です

OO、デザイン パターン、および多くのオブジェクト指向の原則について話す前に、まず 1 つのことを習...

Linux インストール MongoDB の起動と一般的な問題の解決

MongoDB のインストール プロセスと問題記録1. MongoDBのインストールMongoDBを...