PyDevプロジェクトをpipでインストールする

2019-06-14

KDE neonを使おう

t f B! P L
コマンドラインから呼び出すPythonパッケージの作成はPythonモジュールよりちょっと手こずる点がありました。 EclipseでPyDevパースペクティブにします。 File ー> New ー> PyDev Project。 PythonパッケージはPyDe...
これで作成したPyDevプロジェクトをpipでインストールできる形式にします。

そのために必要なことはプロジェクトのルートに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はないようなので、...
この記事の通りpipenvをインストールしたら、PyDev Package ExplorerでPyDevプロジェクトを右クリック ー> Properties。


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からインタープリターを選択しないといけないので、シェルからインストールする方法に比べて便利ということはないですし、シェルから実行するよりかなり遅いです。

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ