■ はじめに
https://dk521123.hatenablog.com/entry/2019/11/09/001342
で触れた egg / wheel について、 実際に Hello world的なことをやる。
後日談
当初は、EGGファイルだけの記事だけだったが
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-job-python.html
でみたら、 EGGファイル(.egg)とWheelファイル(.whl)の作成の違いは、コマンド ~~~~ python setup.py bdist_egg python setup.py bdist_wheel ~~~~ だけだったので、記事を更新する。
目次
【1】環境例 【2】環境構築 1)pip のインストール 2)仮想環境構築ツール virtualenv のインストール 3)テンプレート生成ツールpasterのインストール 【3】egg / wheel 作成手順 1)仮想環境構築の作成 2)パッケージの作成 3)ソースを書く 4)egg / wheel ファイルの作成 5)後処理 【4】egg / wheelファイルを使うには 1)仮想環境作成 2)自作egg / wheelファイルのインストール 3)プログラムを作成&実行 補足:アンインストールする
【1】環境例
* OS : Windows10 * anaconda : version 1.7.2 * Python : Python 3.7.4 * 開発環境 : VS Code v1.42.0 以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2019/10/24/000000
【2】環境構築
1)pip のインストール 2)仮想環境構築ツール virtualenv のインストール 3)テンプレート生成ツールpasterのインストール
1)pip のインストール
python -m pip install --upgrade pip --user
2)仮想環境構築ツール virtualenv のインストール
pip install virtualenv
3)テンプレート生成ツールpasterのインストール
pip install PasteScript # 使用可能な雛型を確認 paster create --list-template === Available templates: basic_package: A basic setuptools-enabled package paste_deploy: A web application deployed through paste.deploy ===
【3】egg / wheel 作成手順
1)仮想環境構築の作成 2)パッケージの作成 3)ソースを書く 4)egg / wheel ファイルの作成 5)後処理 ※ 一度、行えば、3)⇒4)だけでいい。
1)仮想環境構築の作成
# フォルダ「work」を作成 mkdir work cd work # 仮想環境作成 virtualenv --no-site-packages demoenv # 特定のバージョン時 # virtualenv -p python3.6 demoenv # 仮想環境構築に入る(アクティベーション) demoenv\Scripts\activate.bat # Linuxの場合 # source demo-env/bin/activate
2)パッケージの作成
cd demoenv # paster create -t basic_package [パッケージ名] paster create -t basic_package DemoLib [出力] Variables: egg: DemoLib package: demolib project: DemoLib Enter version (Version (like 0.1)) ['']:【バージョン入力(今回は1.0)】 Enter description (One-line description of the package) ['']:【概要文入力(今回はThis is a Demo)】 Enter long_description (Multi-line description (in reST)) ['']: 【説明文入力(今回はThis is a Demo for egg)】 Enter keywords (Space-separated keywords/tags) ['']: 【キーワード入力(今回はDemo egg)】 Enter author (Author name) ['']: 【筆者入力(今回はYour-Name)】 Enter author_email (Author email) ['']:【Email入力(今回はyour@address.com)】 Enter url (URL of homepage) ['']: 【Web入力(今回はhttps://dk521123.hatenablog.com)】 Enter license_name (License name) ['']: 【ライセンス入力(今回はMIT)】 Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]:【ZIP化するか入力(今回はTrue)】 Creating template basic_package Creating directory .\DemoLib Recursing into +package+ Creating .\DemoLib\demolib/ 指定されたパスが見つかりません。 Copying __init__.py to .\DemoLib\demolib\__init__.py 指定されたパスが見つかりません。 Recursing into __pycache__ Creating .\DemoLib\demolib\__pycache__/ 指定されたパスが見つかりません。 Copying setup.cfg to .\DemoLib\setup.cfg 指定されたパスが見つかりません。 Copying setup.py_tmpl to .\DemoLib\setup.py 指定されたパスが見つかりません。 Running c:\programdata\anaconda3\python.exe setup.py egg_info
自動生成されるファイル(.\work\demoenv\DemoLib\setup.py)
from setuptools import setup, find_packages import sys, os version = '1.0' setup(name='DemoLib', version=version, description="This is a Demo", long_description="""\ This is a Demo for egg""", classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers keywords='Demo egg', author='Your-Name', author_email='your@address.com', url='https://dk521123.hatenablog.com', license='MIT', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, zip_safe=True, install_requires=[ # -*- Extra requirements: -*- ], entry_points=""" # -*- Entry points: -*- """, )
自動生成されるファイル (.\work\demoenv\DemoLib\setup.cfg)
[egg_info] tag_build = dev tag_svn_revision = true
3)ソースを書く
.\work\demoenv\DemoLib\demolib\demo_lib.py
def say_hello(name): return "Hello, {}.".format(name)
4)egg / wheel ファイルの作成
eggファイル作成の場合
# python setup.py [コマンド] # bdist_egg : egg 形式で生成 ~~~~ python setup.py bdist_egg ~~~~ => dist配下に「DemoLib-1.0.dev0-py3.7.egg」ができている
wheelファイル作成の場合
# bdist_wheel : wheel 形式で生成 ~~~~ python setup.py bdist_wheel ~~~~ => dist配下に「DemoLib-1.0.dev0-py3-none-any.whl」ができている
補足1:eggファイルの簡易確認方法
1)「DemoLib-1.0.dev0-py3.7.egg」の拡張子を「.zip (DemoLib-1.0.dev0-py3.7.zip)」に変更 2) zipを解凍し、自分が作成したパッケージがあるかどうか確認する ■ 例 + DemoLib-1.0.dev0-py3.7 + demolib <= これあればOK + demo_lib.py + ... + EGG-INFO
補足2:eggファイル名について
■ ファイル例 DemoLib-1.0.dev0-py3.7.egg ■ ファイル名のフォーマット 【ライブラリ名(DemoLib)】-【ライブラリVersion(1.0)】【setup.cfg(.dev0)】-py【Python Version(3.7)】.egg - ライブラリ名(DemoLib) : setup.pyの name - ライブラリVersion(1.0) : setup.pyの version - setup.cfg(.dev0) : setup.cfg の tag_build(tag_build = dev) ※ setup.cfg を削除すれば「.dev0」がなくなる - Python Version(3.7) : 使用したPython version (変更したい場合は、Pythonの仮想環境 virtualenv などを利用し、変更する)
5)後処理
# 仮想環境終了(通常状態に復帰)
deactivate
【4】egg / wheelファイルを使うには
1)仮想環境作成 2)自作egg / wheelファイルのインストール 3)プログラムを作成&実行
1)仮想環境作成
# 仮想環境作成 virtualenv --no-site-packages democlient # 仮想環境構築に入る(アクティベーション) cd demoenv
2)自作egg / wheelファイルのインストール
方法1:easy_install でインストールする
easy_install ..\DemoLib\dist\DemoLib-1.0.dev0-py3.7.egg Processing DemoLib-1.0.dev0-py3.7.egg creating c:\programdata\anaconda3\lib\site-packages\DemoLib-1.0.dev0-py3.7.egg Extracting DemoLib-1.0.dev0-py3.7.egg to c:\programdata\anaconda3\lib\site-packages Adding DemoLib 1.0.dev0 to easy-install.pth file Installed c:\programdata\anaconda3\lib\site-packages\demolib-1.0.dev0-py3.7.egg Processing dependencies for DemoLib==1.0.dev0 Finished processing dependencies for DemoLib==1.0.dev0
方法2:pip でインストールする
# インストール pip install .\dist\DemoLib-0.1.dev0-py3-none-any.whl # 確認1:pip list pip list ・・・ DemoLib 0.0 ・・・ # 確認2:pip show <package> pip show DemoLib
3)プログラムを作成&実行
main.py
from demolib.demo_lib import * if __name__=='__main__': result = say_hello('Mike') print('Result = {}'.format(result))
出力結果
Result = Hello, Mike.
補足:アンインストールする
pip の場合
# まず、一覧表示 pip list ・・・ DemoLib 0.0 ・・・ # アンインストール pip uninstall DemoLib
参考文献
egg作成
https://www.exsoft.net/blog/entry/ab4v5g.html
virtualenv
https://hibiki-press.tech/learn_prog/python/virtualenv/4545
setupコマンド
https://qiita.com/JhonnyBravo/items/b8bae2578f07f31e4de7
関連記事
パッケージ配布 ~ setup.pyによる作成方法 ~
https://dk521123.hatenablog.com/entry/2024/03/19/000000
パッケージ配布 ~ pyproject.tomlによる作成方法 ~
https://dk521123.hatenablog.com/entry/2024/03/28/000000
パッケージ配布 ~ setuptoolsあれこれ ~
https://dk521123.hatenablog.com/entry/2024/04/17/132415
パッケージ管理 ~ wheel / egg ~
https://dk521123.hatenablog.com/entry/2019/11/09/001342
パッケージ管理 ~ pip ~
https://dk521123.hatenablog.com/entry/2021/07/02/000000
オフライン環境下で pip install するには
https://dk521123.hatenablog.com/entry/2021/07/10/164833
Visual Studio Code ~ Python拡張 ~
https://dk521123.hatenablog.com/entry/2019/10/24/000000
Github Actions ~ Python関連 ~
https://dk521123.hatenablog.com/entry/2022/06/21/143624