コマンドラインから呼び出すPythonパッケージの作成はPythonモジュールよりちょっと手こずる点がありました。 EclipseでPyDevパースペクティブにします。 File ー> New ー> PyDev Project。 PythonパッケージはPyDe...
そのために必要なことはプロジェクトのルートに2つのファイルを追加するだけです。
追加するファイルはsetup.cfgとsetup.pyの2つです。
srcフォルダにはPythonパッケージのフォルダが入っています。
from setuptools import setup setup()setup.pyファイルはこれだけです。
どのプロジェクトでも同じです。
setup.pyファイルがあるところがこのプロジェクトのルートになります。
もう一つのsetup.cfgにプロジェクト固有の情報を書きます。
setup.cfgの書き方
[metadata] name = pkg1 version = attr: pkg1.__version__ [options] package_dir= =src packages=find: [options.packages.find] where=src [options.entry_points] console_scripts = pkg1 = pkg1:main今回のプロジェクトのための最低限の設定のsetup.cfgはこのようになりました。
パッケージのバージョンはパッケージの__version__アトリビュートから取得しています。
パッケージフォルダをルートフォルダでなくsrcフォルダ内に置いているためpackage_dirで指定して、options.packages.findサブセクションでパッケージフォルダの検索先を指定しています。
options.entry_pointsサブセクションでコマンドラインで呼び出すコマンド名をキーとして、実行する関数をモジュール:関数の形式で指定しています。
Building and Distributing Packages with Setuptools — setuptools 41.0.1 documentation
ここにマニュアルがありますが、読むのは結構大変です。
metadataセクション
metadataセクションのキー一覧はMetadataにあります。
のちのちPypiにも登録することも考えて、使いそうなKey一覧を抜粋しました。
Typeの解説はSpecifying valuesにあります。
strは文字列、list-commaはコンマ区切りの文字列になります。
コンマ区切りのものはコンマの代わりに改行が使えます。
attr: はモジュールのアトリビュートを取得します。
callablesとiterablesをサポートしそれ以外は文字列に変換されます。
file: はファイルの内容を読み取ります。
読み取れるファイルはsetup.pyがあるディレクトリ以下にあるもののみです。
optionsセクション
optionsセクションのキーの一覧はOptionsにあります。
一部を抜粋しました。
boolはTrueかFalse、list-semiはセミコロン区切りの文字列、sectionはサブセクション、dictは=で結んだキーと値のペアのコンマ区切りです。
一覧にないキーは無視されます。
PyDevプロジェクトの仮想環境を作成する
setup.cfgとsetup.pyを作成したらあとはsetup.pyファイルがあるところでpipでインストールするだけですが、まず環境を汚さないようにpipenvで仮想環境を作成します。
pipenvのインストール Pipenv & Virtual Environments — pipenv 2018.11.27.dev0 documentation ドキュメントにはいくつかインストール方法が書いてあります。 bionic用のPPAはないようなので、...
PyDev - Interpreter/Grammar。
Click here to configure an interpreter not liseted.をクリック。
Create using pipenv。
Create Pipenv interpreter。
OK。
Interpreterが(pipenv)という名前がついたものに変更になっていればApply and Close。
PyDevプロジェクトをpipでインストールする
pipでインストールした場合とpipenvでインストールした場合の違いは、Pipfile.lockにインストールパッケージが登録されないかされるかの点です。
依存性のある複数のパッケージを開発中というのでなければ、pipenvでインストールするする必要はないかと思います。
-eオプションをつけるかつけないかの違いは、PyDevプロジェク内のファイルをそのまま使うか、site-packagesフォルダにインストールするかの点です。
Eclipseでパッケージを編集して保存するだけで変更点が反映できるので、開発中のパッケージは-eオプションをつけてインストールしたほうが便利です。
ただコマンドラインからの起動の仕方が-eオプションなしでインストールしたときと異なるので起動が遅くなったりすることもあるようです。
シェルからインストールする方法
PyDevプロジェクトを右クリック ー> StartExplorer ー> Start Shell Here。
pipenv shell
これでPyDevプロジェクトのルートで仮想環境のシェルに入れます。
pipenv install -e . または pip install -e .
pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ pipenv shell Launching subshell in virtual environment… pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ . /home/pq/.local/share/virtualenvs/PkgExample-Wio1Xr3O/bin/activate (PkgExample) pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ pipenv install -e . Installing -e .… Adding pkg1 to Pipfile's [packages]… ✔ Installation Succeeded Pipfile.lock not found, creating… Locking [dev-packages] dependencies… Locking [packages] dependencies… ✔ Success! Updated Pipfile.lock (ca98d3)! Installing dependencies from Pipfile.lock (ca98d3)… 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 1/1 — 00:00:0
パッケージフォルダと同じところに*.egg-infoフォルダが作成されています。
エントリーポイントを指定しているのでパッケージ名で起動できます。
(PkgExample) pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ which pkg1 /home/pq/.local/share/virtualenvs/PkgExample-Wio1Xr3O/bin/pkg1 (PkgExample) pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ pkg1 -h usage: pkg1 [-h] [-r] [-v] [-i RE] [-e RE] [-V] path [path ...] Package example. positional arguments: path paths to folder(s) with source file(s) [default: None] optional arguments: -h, --help show this help message and exit -r, --recursive recurse into subfolders [default: False] -v, --verbose set verbosity level [default: 0] -i RE, --include RE only include paths matching this regex pattern. Note: exclude is given preference over include. [default: None] -e RE, --exclude RE exclude paths matching this regex pattern. [default: None] -V, --version show program's version number and exit-eオプションを付けずにインストールしてもコマンドファイルのある場所は同じですが、-eオプションを使ってインストールした場合はpkg_resourcesモジュールのload_entry_pointを使って呼び出しています。
pip freeze
これでインストールされているパッケージ一覧が取得できます。
アンインストールするときはパッケージ名を指定しないといけません。
pipenv uninstall pkg1
(PkgExample) pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ pip freeze # Editable install with no version control (pkg1==2019.6.9.dev0) -e /home/pq/eclipse-workspace/PkgExample/src (PkgExample) pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ pipenv uninstall pkg1 Uninstalling pkg1… Uninstalling pkg1-2019.6.9.dev0: Successfully uninstalled pkg1-2019.6.9.dev0 Removing pkg1 from Pipfile… Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (ca72e7)!
EclipseのPreferencesからインストールする方法
Eclipse ー> Preferences。
PyDev ー> Interpreters ー> Python Interpreter。
インストールしたい仮想環境のインタープリターを選択してManage with pipかManage with pipenvボタンをクリック。
pipかpipenvに渡す引数を入力してRunをクリックするとインストール完了です。
-eオプションを付けずにインストールしたときはPackagesタブにパッケージ名とバージョンがでてきます。
pipenvでインストールしてもpipでインストールしたと表示されます。
アンインストールするときはインストールのときと同様にpipやpipenvに渡す引数を入力してRunします。
いちいちPreferencesからインタープリターを選択しないといけないので、シェルからインストールする方法に比べて便利ということはないですし、シェルから実行するよりかなり遅いです。
0 件のコメント:
コメントを投稿