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

推薦する

vue の v-for ディレクティブはリストのレンダリングを完了します

目次1. リストの走査2. Vueにおけるキーの役割3. リストフィルタリングこの記事では、Vue ...

uniappのグローバル変数実装の詳細な説明

序文この記事では、uniapp グローバル変数の実装方法をいくつかまとめています。詳細な知識は、uV...

MySQL 5.7.20 圧縮版のダウンロードとインストールの簡単なチュートリアル

1. ダウンロードアドレス:参考: http://dev.mysql.com/downloads/m...

CSS BEM 命名標準の概要 (推奨)

1 BEM命名標準とはBem は、ブロック、要素、修飾子の略語であり、Yandex チームによって...

CentOS7.4 起動時の緊急モードへようこそメッセージに対する解決策

今日は仮想マシンを使って実験をしました。システムをインストールし、いくつかのオプションを最適化した後...

最も完全な 50 の MySQL データベース クエリ演習

このデータベース クエリ ステートメントは、インターネット上の 50 個のデータベース クエリ練習問...

MySQLクエリ条件のnot inとinの違いと理由

まずSQLを書く SELECT DISTINCT from_id タラから cod.from_id ...

タブステータスバーの切り替え効果を実現するための js と jQuery

今日は、タブ バーをクリックして切り替えるという目的を実現するために、js と jQuery を使用...

Linuxのip netnsコマンドを使用してネットワークポートを分離し、IPアドレスを設定します。

1. 分離マーカーを追加します。 ip netns add fd 2. 指定されたネットワーク カ...

SQLシリアル番号取得コード例

この記事は主にSQLシリアル番号取得コード例を紹介します。記事ではサンプルコードを詳細に紹介しており...

MySQL 5.6 圧縮パッケージのインストール方法

MySQL には、msi インストールと zip 解凍の 2 つのインストール方法があります。 zi...

元のPATHを上書きしてコマンドが見つからないというメッセージが表示されるコマンド失敗の問題を解決する方法

同僚から、LINUX サーバー上の多くのコマンドが (コマンドが見つかりません) というプロンプトで...

通知メッセージカルーセルを実装するための CSS3 トランジション

Vueバージョンをファイルにコピーして使用します <テンプレート> <!-- カル...

XHTML ブロックレベルタグの概要

* 住所 - 住所* blockquote - ブロック引用* center - 中央揃えブロック*...

HTML ハイパーリンクの詳細な説明

ハイパーリンクハイパーリンクは、Web サイト上のすべてのページがハイパーリンクで接続され、ページ間...