rainit2006 / Python-room

my python room
0 stars 0 forks source link

Pythonのパッケージ管理 #20

Open rainit2006 opened 5 years ago

rainit2006 commented 5 years ago

--

rainit2006 commented 5 years ago

pythonのsetup.pyについて https://qiita.com/Tadahiro_Yamamura/items/2cbcd272a96bb3761cc8

setup.py関連のファイルは全てプロジェクトのルートに配置する。 image

setup.pyを書くメリット : 標準で付属するpipを使ってコードを他人と共有できる。

setup.pyの書き方

from setuptools import setup

setup(
    name="パッケージの名前",
    version="パッケージのバージョン(例:1.0.0)",
    install_requires=["packageA", "packageB"],
    extras_require={
        "develop": ["dev-packageA", "dev-packageB"]
    },
    entry_points={
        "console_scripts": [
            "foo = package_name.module_name:func_name",
            "foo_dev = package_name.module_name:func_name [develop]"
        ],
        "gui_scripts": [
            "bar = gui_package_name.gui_module_name:gui_func_name"
        ]
    }
)

setup.pyと同じディレクトリにsetup.cfgという設定ファイルを作る 基本的な書き方はWindowsの.iniファイルに似ている。"["と"]"でセクションを表し、key=valueという形式で値を指定する。

# metadataセクションではパッケージのメタデータを定義する
# これらの値はpypiで公開した際に表示される。
# なおversion等、一部のキーはディレクティブの指定により外部ファイルから値を取得することができる
# https://setuptools.readthedocs.io/en/latest/setuptools.html#metadata
[metadata]
name = your_package
version = attr: src.VERSION
license = file: license.txt

# optionsセクションではパッケージの依存関係やpip installした時の動作を定義する
# 値が複数ある場合、インデントすることで1行に1つの値を書くことができる。
# https://setuptools.readthedocs.io/en/latest/setuptools.html#options
[options]
install_requires =
    packageA
    packageB

# optionの内、値のTypeがsectionのものは別セクションで記述する。
[options.extras_require]
develop =
    dev_packageA
    dev_packageB

[options.entry_points]
console_scripts =
    foo = package_name.module_name:func_name
    foo_dev = package_name.module_name:func_name [develop]
gui_scripts =
    bar = gui_package_name.gui_module_name:gui_func_name

官方文档: https://docs.python.jp/3/distutils/setupscript.html

rainit2006 commented 5 years ago
setup(
    name='xxxx_models',
    packages=find_packages(exclude=('test', 'test.*')),
    package_data={
        '': [
            'data/*.json',
            'data/*.md',
            'data/*.yml',
            'data/models/nlu_model_*/*',
            'data/models/int_model/policy_*/*',
            'data/models/int_model/*.json',
            'data/models/int_model/*.yml',
            'data/models/int_model/*.md',
        ]
    },
    install_requires=reqs,
    test_suite='setup.get_test_suite',
)

Package data can be added to packages using the package_data keyword argument to the setup() function. The value must be a mapping from package name to a list of relative path names that should be copied into the package. https://docs.python.org/2/distutils/setupscript.html