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

推薦する

html 内の絶対パス URL と相対パス URL、サブディレクトリ、親ディレクトリ、ルート ディレクトリ

絶対 URL は、インターネット上の特定のファイルに必要なすべてのコンテンツを表すために使用されます...

Web プロジェクト開発における 2 つのトークン理由とサンプル コードの分析

目次質問:プロジェクトには 2 つのトークンがあり、1 つは有効期間が 2 時間 (ショート トーク...

HTML ページ共通スタイル (推奨)

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピーbody、di...

Linux での rpm、yum、ソースコードの 3 つのインストール方法の詳細な紹介

第1章 ソースコードのインストールRPM パッケージは特定のシステムとプラットフォームに応じて指定さ...

CSS変数がJSインタラクティブコンポーネント開発にもたらす改善と変更のサンプルコードの詳細な説明

1. CSS変数がもたらす質的変化CSS 変数によってもたらされる改善は、CSS コードの節約や C...

モバイル端末の水平および垂直画面ビューポート検出を決定するための js のいくつかの方法

目次1. 異なるビューポートを取得する方法2. 水平画面と垂直画面のJavaScript検出3. 水...

MySql におけるプロセス制御関数/統計関数/グループ化クエリの使用法の分析

これからの道のりは長く困難ですが、私は探求を続けます。また週末がやってきました。引き続き、皆さんと一...

XHTMLコードの一般的なアプリケーション問題をまとめる

<br />しばらくの間、多くの人が XHTML の使い方を知らないことに気付きました。...

MySQLのスイッチングデータ保存ディレクトリの実装方法

MySQLのスイッチングデータ保存ディレクトリの実装方法今日、仕事中に、mysql が保存されている...

MySQL エラー「すべての派生テーブルには独自のエイリアスが必要です」の解決方法

MySQL は、マルチテーブルクエリを実行するときにエラーを報告します。 [SQL] SELECT ...

MySQL マスタースレーブレプリケーション切断の一般的な修復方法

目次01 問題の説明02 ソリューション1. 他のスレーブライブラリを見つけてすぐに置き換える2. ...

MySQL CHARとVARCHARの保存と読み取りの違い

導入保存時と読み取り時に CHAR 型と VARCHAR 型の違いを本当にご存知ですか?まずいくつか...

KVM 仮想マシンのオンライン ホット マイグレーションを実装する方法 (画像とテキスト)

1. KVM仮想マシンの移行方法と注意すべき点KVM 仮想マシンを移行する方法は 2 つあります。...

Vue を使用して Web ページのスクリーンショットを撮る方法をご存知ですか?

目次1. html2Canvasをインストールする2. 必要なVueコンポーネントを導入する3. ス...

Linux サーバーのグラフィック カードのクラッシュの解決策

ログインインターフェースの解像度が特に大きい場合、グラフィカルインターフェース全体が特に大きくなり、...