pythonパッケージはpypiまたはプライベート倉庫に公開され、ピットを踏むModuleNotFoundError:No module named'keyring.util.Escape等
14931 ワード
0.先頭に書く:
私たちが自分で書いたpythonパッケージをカプセル化し、ネットワークに共有して使用するのは、もともと基本的な操作です.しかし、これまで個人的に自分のパッケージのライブラリをpypiにアップロードしたことがなく、ちょうど今回の自分のパッケージの簡単なパッケージがみんなに提供する機会に、できるだけ完全にこの過程を実践し、過程の中でいくつかの穴を踏んだので、ここでは穴を踏む過程を記録します.
1.共有|リリースの準備
0)パッケージのベースディレクトリ構造:
1)setupを作成する.py
setup.pyのファイル
辞書パラメータの詳細については、公式サイト:1を参照してください.pypi公式サイト対応説明2.pythonの公式サイトの対応説明にはもっと便利な方法があります.成熟したモジュールの書き方を参考にして真似することです.もちろん、私のこのモジュールのホームページを見てもいいです.
2)
表示正确次のステップに進むことができます.
3)
ヒント:他の人の優れた書き方を参考にして、LICENSEは基本的に公式の三方庫を探してコピーすればいいです.
2.ニーズに応じたパッケージ化|モジュール構築
1)需要一:簡単に分かち合い、
現在のディレクトリ構造:
モジュールのインストール 1.解凍 2.取り付け: モジュールのアンインストールモジュールに対応する取り付け位置を見つける、
2)ニーズ2:pypiを共有することで、より多くの人が使いやすい
1.モジュールの構築 1.友情のヒント:それぞれのバージョンと照らし合わせて 2.友情のヒント:全文は
2.パブリケーション圧縮パッケージの生成
3.プリリリース 1.配布に必要なツールのインストール: 2. です. 3.テストバージョンのリリース、実行: 4. 私は変更命令行を実行している間にエラーが発生しました: 5.何度も振り回して、私は正しい姿勢を見つけました. 1. 2.正しくインストールしたらpython 3解釈器に入り、 をインポートしようとします. 3.次に実行: 4.正しく実行した後、python 3解釈器に入り、 5.そして、上記の操作に基づいて、 6.
4.ダウンロードテスト 1. 2.注意パラメータ 3.ダウンロード 4.ここでのダウンロード方法も参考にすることができる.
5.pypi正式服アカウントを登録し、正式服にアップロードする. 1.必ず登録と認証を完成しなければならない.そうしないと、後にアップロードするなどの報告が間違っている.大部分は認証が完備していないか、正しくないからだ. 2.実行: を指定する必要はありません. 3.自分のpypiアカウントに行って調べることができます.
3)需要3:gitlabなどの私有倉庫に共有し、内部で使用する
1.コードパッケージのコードをgitlab倉庫に公開する 1.公開方法は日常の提出コードと変わらないが、 を参照してください.
2.インストールと使用 1.一般gitlabのプライベートウェアハウスは暗号化されているため、アカウントのアイデンティティと権限が必要であり、一般的にdeploy token情報を構成する必要がある. 2.具体的なコマンド: 2.1そのうち . 2.2 2.3上記インストールはデフォルトインストールマスター分岐上の内容であることに注意する、非マスター分岐上の内容をインストールするには上記コマンドの
3.dockerで
参考資料: 1.https://bugs.launchpad.net/usd-importer/+bug/1794041 2.https://packaging.python.org/tutorials/packaging-projects/ 3.https://docs.python.org/3/distutils/examples.html
本例のURL: 1.https://github.com/GalphaXie/django-jaeger-middleware 2.https://pypi.org/project/django-jaeger-middleware/
私たちが自分で書いたpythonパッケージをカプセル化し、ネットワークに共有して使用するのは、もともと基本的な操作です.しかし、これまで個人的に自分のパッケージのライブラリをpypiにアップロードしたことがなく、ちょうど今回の自分のパッケージの簡単なパッケージがみんなに提供する機会に、できるだけ完全にこの過程を実践し、過程の中でいくつかの穴を踏んだので、ここでは穴を踏む過程を記録します.
1.共有|リリースの準備
0)パッケージのベースディレクトリ構造:
django-jaeger-middleware/
├── django_jaeger_middleware # , ,
│ ├── __init__.py
│ ├── metadata.py
│ └── middleware.py
├── LICENSE # LICENSE, README.md, setup.py
├── README.md
└── setup.py
1 directory, 6 files
1)setupを作成する.py
setup.pyのファイル
from setuptools import setup, find_packages
# , `setup()`
MIDDLEWARE_BASE_DIR = os.path.abspath(os.path.dirname(__file__))
meta_file = open(os.path.join(MIDDLEWARE_BASE_DIR, "django_jaeger_middleware", "metadata.py")).read()
md = dict(re.findall(r"__([a-z]+)__\s*=\s*'([^']+)'", meta_file)) # metadata.py
with open(os.path.join(MIDDLEWARE_BASE_DIR, 'README.md')) as f:
long_description = f.read()
setup(
name='django-jaeger-middleware',
license='MIT',
version=md['version'],
description=' ',
long_description=long_description, # , `README.md`
long_description_content_type="text/markdown",
author=md['author'],
author_email=md['authoremail'],
url="https://github.com/GalphaXie/django-jaeger-middleware", #
download_url='https://github.com/GalphaXie/django-jaeger-middleware',
packages=find_packages(),
install_requires=[
"jaeger_client", #
],
keywords=['django', 'jaeger', 'jaegertracing'],
classifiers=[
"Framework :: Django",
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
zip_safe=False
)
辞書パラメータの詳細については、公式サイト:1を参照してください.pypi公式サイト対応説明2.pythonの公式サイトの対応説明にはもっと便利な方法があります.成熟したモジュールの書き方を参考にして真似することです.もちろん、私のこのモジュールのホームページを見てもいいです.
2)
setup.py
モジュールの文法が正しいかどうかを検査する$ python3 setup.py check
を実行すると、コンソールが表示されます.running check
表示正确次のステップに進むことができます.
3)
README.md
とLICENSE
の内容を補充するヒント:他の人の優れた書き方を参考にして、LICENSEは基本的に公式の三方庫を探してコピーすればいいです.
2.ニーズに応じたパッケージ化|モジュール構築
1)需要一:簡単に分かち合い、
xxx.tar.gz
を通じて伝達し、pipインストールを使用できない#
python3 setup.py build # build
#
python3 setup.py sdist # dist django_jaeger_middleware.egg-info
: , !
現在のディレクトリ構造:
├── build
│ └── lib
│ └── django_jaeger_middleware
│ ├── __init__.py
│ ├── metadata.py
│ └── middleware.py
├── dist
│ └── django-jaeger-middleware-1.0.0.tar.gz
├── django_jaeger_middleware #
│ ├── __init__.py
│ ├── metadata.py
│ └── middleware.py
├── django_jaeger_middleware.egg-info
│ ├── dependency_links.txt
│ ├── not-zip-safe
│ ├── PKG-INFO
│ ├── requires.txt
│ ├── SOURCES.txt
│ └── top_level.txt
├── LICENSE
├── README.md
└── setup.py
6 directories, 16 files
モジュールのインストール
tar -zxvf -C
: tar -zxvf django-jaeger-middleware-1.0.0.tar.gz . `site-packages`
python3 setup.py install
rm -r xxx
でよい.2)ニーズ2:pypiを共有することで、より多くの人が使いやすい
1.モジュールの構築
setuptools
とwheel
モジュールをインストールし、以前にインストールされていた場合は最新に更新でき、公式サイトのpython3 -m pip install --user --upgrade setuptools wheel
を統一的に実行します.python3
またはpython
またはpython2
を選択してください.そのバージョンの解釈器を選択してください.後にコンパイルされたのは対応するOS + python
のバージョンです.python
解釈器のバージョンについて言及していないので、必要に応じて解釈器のバージョンを調整してください.2.パブリケーション圧縮パッケージの生成
python3 setup.py sdist bdist_wheel
が正しく実行されたディレクトリ構造は、次のとおりです..
├── build
│ ├── bdist.linux-x86_64
│ └── lib
│ └── django_jaeger_middleware
│ ├── __init__.py
│ ├── metadata.py
│ └── middleware.py
├── dist
│ ├── django_jaeger_middleware-1.0.0-py3-none-any.whl
│ └── django-jaeger-middleware-1.0.0.tar.gz
├── django_jaeger_middleware
│ ├── __init__.py
│ ├── metadata.py
│ └── middleware.py
├── django_jaeger_middleware.egg-info
│ ├── dependency_links.txt
│ ├── not-zip-safe
│ ├── PKG-INFO
│ ├── requires.txt
│ ├── SOURCES.txt
│ └── top_level.txt
├── LICENSE
├── README.md
└── setup.py
7 directories, 17 files
3.プリリリース
twine
、実行python3 -m pip install --user --upgrade twine
pypi
をリリースする予定ですが、事前に公式サイトに登録する必要がない場合は注意してください.これはテスト公式サイトpython3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
:もちろん、私はここで穴を踏んで、pypi
にissueを持って、ここをクリックして見ることができます.具体的なプロセスModuleNotFoundError: No module named 'keyring.util.escape'
、私はエラー全体を詳しく見ました.0.まず私が間違っている環境を紹介します:Ubuntu 18.04のシステム、python 3.6.9、pip 19.0.1のバージョン.1.keyring
のソースコードを読んでみて、簡単に読んでからもっと良い手がかりが見つからなかった.2.むやみに振り回して、結果が出ない.3.配布ツールがtwine
であるのを見て、ubuntuシステムの下にwinのツールをインストールする必要があると思いました.wine
ツールをインストールするので、この配布はwinの下でしか操作できないのではないかと疑っています.ubuntuの下では操作できません.これはそんなに合理的ではないように見えますが、winシステムの下で試してみるしかありません.死んだ馬は生きた馬医としていいです.もちろん、この過程には多くの時間と気持ちがかかりました.4.winの下でテストして、私は思い出す前にすべてのコマンドの実行過程をよく見て、確かに何の問題も発見していません.また、実行中のいくつかのwarnning
を順次処理したが、やはり今回は順調で、プリリリースのプロセスを実行するとpypiアカウントのパスワードを入力する段階に入った.(具体的な処理のwinning
はpipのアップグレードの問題があります;あるスクリプトの環境変数の問題、特にこの環境変数の問題.5.上の環境変数の問題は私に啓示して、私はubuntuの下で私がいくつかのpythonの3つのライブラリのスクリプトを無視してグローバルなpython解釈器の環境の中でないかどうかを確認したいです.コンソールに出力された結果.しかし、私は何のクモの跡も発見しなかった.6.エラーバグは依然として発生している.だから私はやむを得ず真剣にグーグルの中を见て、昨日真剣に见ていない1篇の招待状(招待状の住所)を见て、やむを得ず辛抱強く探して私はついにクモの糸の马迹を见つけました.私がインストールしたkeyrings
ライブラリのバージョンの問題に合理的な疑問を抱かせ、pip3 install --upgrade keyrings.alt
コマンドと組み合わせて、私は試みた.python3 -m pip install keyring
#取付import keyring
で同じエラーpython3 -m pip install --upgrade keyrings.alt
import keyring
を導入しようとしたが、コンソールはついにエラーを報告しなかった.私はimport keyring.util.escape
を実行し続け、またエラーを報告し続けた.keyring.util
とkeyring.util.escape
の2つのパッケージを個別に取り付けるかどうかを合理的に推測します.しかし、この2つのパッケージがpypi
の倉庫に単独で存在することはない.また、dir(keyring)
とdir(keyring.util)
を使用して、keyring
というパッケージに対応する属性と方法があるかどうかを観察する.発見は:keyring.util
という属性が存在する.keyring.util.escape
があるかどうかをもう一度見てみると、dir
に結果が出て、私は見ませんでした.元のアップロード命令からpython3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
に着手し続け、ついにこの命令も間違っていない.4.ダウンロードテスト
pypi
に正常にアップロードされた後、ダウンロードインストールを行い、正しいかどうかを確認します.実行:python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-pkg
--no-deps
は、インストールするパケットに必要な他の依存パケットを無視することである.(この「穴」を説明します:私たちのバッグは現在pypi
に共有されていますが、もし私たちのバッグの中で他の3つのライブラリに依存している場合、これらの3つのライブラリは必ずしもpypi
の上に対応するインストールパッケージがあるとは限りません.私たちはこれらのエラーを無視する必要があります.このパラメータを加えなければ、
のエラーを報告します.)successful
を見ると、python解釈器に入ってimport example
を実行することができ、example-pkg
を導入してNo module
を報告しないと、xxx no module
のエラーを報告する可能性があるので、無視すればよい.5.pypi正式服アカウントを登録し、正式服にアップロードする.
twine upload dist/*
アップロードできます.url 3)需要3:gitlabなどの私有倉庫に共有し、内部で使用する
1.コードパッケージのコードをgitlab倉庫に公開する
.gitignore
の書き方に注目するには、ここ2.インストールと使用
pip install -e git+https://{deploy token}@git.ucloudadmin.com/securityhouse/pyservice/django-jaeger-middleware.git#egg=1.0.0
{deploy token}
はname:password
に対応する、注意{}
を外すegg=tag
、tagは最新のmasterブランチによって作成される必要がある.setupに対応するもよい.pyのパッケージ名、私の例では1.0.0
#egg=1.0.0
部分を@ #egg=
に置き換える必要がある.対応する各符号を見逃さないようにすることが容易である.3.dockerで
deploy token
を構成する必要があります.そうしないと、エラーが発生します.参考資料:
本例のURL: