setup.py
とは何ですか、またどのように設定または使用できますか。
setup.py
はpythonファイルです。通常、インストールしようとしているモジュール/パッケージは、Pythonモジュールを配布するための標準であるDistutilsでパッケージ化され、配布されていることを示しています。
これにより、Pythonパッケージを簡単にインストールすることができます。多くの場合、それを書くのに十分です:
$ python setup.py install
そしてモジュールはそれ自身をインストールします。
https://docs.python.org/3/installing/index.html#installing-index
あなたが他のプロジェクトや[I] Pythonプロンプトからfoo
パッケージをインポートできるようにあなたのマシンにpythonパッケージvirtualenv
をインストールするのを助けます(foo
にもあり得ます)。
pip
、easy_install
などの同様の仕事をします
setup.py
を使用する
いくつかの定義から始めましょう。
Package - __init__.py
ファイルを含むフォルダー/ディレクトリー。
Module - .py
拡張子を持つ有効なpythonファイル。
ディストリビューション - あるパッケージと他のパッケージおよびモジュールとの関係。
foo
という名前のパッケージをインストールしたいとしましょう。それなら、
$ git clone https://github.com/user/foo
$ cd foo
$ python setup.py install
代わりに、実際にインストールしたくないがまだ使用したい場合は、それから、
$ python setup.py develop
このコマンドは、コピーする代わりにsite-packages内のソースディレクトリへのシンボリックリンクを作成します。このため、非常に高速です(特に大規模パッケージの場合)。
setup.py
を作成する
あなたのパッケージツリーが
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
└── setup.py
次に、setup.py
スクリプトで次のようにして、それをあるマシンにインストールできるようにします。
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='[email protected]',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
)
代わりに、あなたのパッケージツリーが以下のようにもっと複雑であれば:
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
├── scripts
│ ├── cool
│ └── skype
└── setup.py
それでは、この場合のsetup.py
は次のようになります。
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='[email protected]',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
(setup.py
)にさらにものを追加する &それをまともにする:
from setuptools import setup
with open("README", 'r') as f:
long_description = f.read()
setup(
name='foo',
version='1.0',
description='A useful module',
license="MIT",
long_description=long_description,
author='Man Foo',
author_email='[email protected]',
url="http://www.foopackage.com/",
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
long_description
は pypi.org であなたのパッケージのREADMEの説明として使われています。
そして最後に、あなたのパッケージを PyPi.org にアップロードする準備が整いました。そうすれば、他の人がpip install yourpackage
を使ってあなたのパッケージをインストールすることができます。
最初のステップは、pypiであなたのパッケージ名とスペースを請求することです。
$ python setup.py register
あなたのパッケージ名が登録されると、誰もそれを主張することも使用することもできません。登録が成功したら、次のようにしてパッケージをそこに(クラウドに)アップロードする必要があります。
$ python setup.py upload
オプションで、GPG
を使ってパッケージに署名することもできます。
$ python setup.py --sign upload
ボーナス :実際のプロジェクトからのサンプルsetup.py
を参照してください。 torchvision-setup.py
setup.py
は、マルチプラットフォームのインストーラとmake
ファイルに対するPythonの答えです。
コマンドラインインストールに慣れている場合は、make && make install
はpython setup.py build && python setup.py install
に変換されます。
一部のパッケージは純粋なPythonで、バイトコンパイルのみです。他の人はネイティブコードを含むかもしれません、それはネイティブコンパイラ(gcc
やcl
のような)とPythonインターフェースモジュール(swig
やpyrex
のような)を必要とします。
ルートフォルダに "setup.py"を含むパッケージをダウンロードした場合は、次のコマンドを実行してインストールできます。
python setup.py install
あなたがプロジェクトを開発していて、このファイルが何に役立つのか疑問に思っているのであれば、 セットアップスクリプトを書くことについてのPythonのドキュメント
setup.py
は通常その言語で書かれたライブラリやプログラムに同梱されているPythonスクリプトです。その目的は、ソフトウェアを正しくインストールすることです。
多くのパッケージは、setup.py
と組み合わせてdistutils
フレームワークを使用します。
setup.pyは2つのシナリオで使用できます。まず、Pythonパッケージをインストールします。第二に、あなたはあなた自身のPythonパッケージを作りたいのです。通常、標準のPythonパッケージには、setup.py、setup.cfg、およびManifest.inなどの重要なファイルがいくつかあります。 Pythonパッケージを作成するとき、これら3つのファイルは(Egg-infoフォルダーの下のPKG-INFOの内容)名前、バージョン、説明、その他の必要なインストール(通常は.txtファイルにあります)、その他いくつかのパラメーターを決定します。 setup.cfgはパッケージの作成中にsetup.pyによって読み込まれます(tar.gzでも構いません)。 Manifest.inは、パッケージに何を含めるべきかを定義できる場所です。とにかくsetup.pyを使ってたくさんのことができます
python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo] (to upload package to pypi or local repo)
Setup.pyと一緒に使用できる他のコマンドもたくさんあります。助けて
python setup.py --help-commands
ダウンロードしたPythonパッケージをインストールするには、アーカイブを解凍し、その中にあるsetup.pyスクリプトを実行します。
python setup.py install
私には、これはいつも変に感じました。 RubyやNodejsのように、ダウンロードをパッケージマネージャに向けるのはより自然です。 gem install Rails-4.1.1.gem
パッケージマネージャは、慣れ親しんだ信頼性があるので、より快適です。一方、それぞれのsetup.py
は小説です。なぜならそれはパッケージに固有のものだからです。それは慣習への信仰を要求します。それは精神的意志力に対する遺憾な課税です。
Setup.pyのワークフローがパッケージマネージャほど安全ではないと言っているわけではありません(私はPipがsetup.pyを内部で実行するだけであることを理解しています)。すべてのコマンドが同じパッケージマネージャアプリケーションに対するものであるという調和があります。あなたはそれが好きになるかもしれません。
setup.py
を使ってパッケージをダウンロードするときは、ターミナル(Mac、Linux)またはコマンドプロンプト(Windows)を開いてください。 cd
を使用してTabボタンを押すと、ファイルをダウンロードしたフォルダとsetup.py
があるフォルダへのパスが正しく設定されます。
iMac:~ user $ cd path/pakagefolderwithsetupfile/
Enterキーを押すと、次のようになります。
iMac:pakagefolderwithsetupfile user$
それから、このpython setup.py install
の後にタイプしてください:
iMac:pakagefolderwithsetupfile user$ python setup.py install
enter
を押します。完了しました。
setup.py
は他のPythonファイルです。慣習的にsetup.py
という名前が付けられていることを除いて、名前は任意ですが、スクリプトごとに異なる手順はありません。
ほとんどの場合、setup.py
はPythonモジュールのインストールに使用されますが、その他の目的にはサーバーとして使用されます。
モジュール:
おそらくこれはsetup.py
の最も有名な使い方はモジュールの中です。それらはpip
を使ってインストールすることができますが、古いPythonバージョンはデフォルトではpip
を含んでおらず、それらは別々にインストールする必要がありました。
モジュールをインストールしたいがpip
をインストールしたくない場合は、setup.py
ファイルからモジュールをインストールするしかありません。これはpython setup.py install
で実現できます。これはPythonモジュールを(pip
、easy_install
ectなしで)ルート辞書にインストールするでしょう。
このメソッドはpip
が失敗するときによく使われます。たとえば、目的のパッケージの正しいPythonバージョンがpip
経由で入手できない場合、おそらくソースをダウンロードしてpython setup.py install
を実行しても、コンパイル済みバイナリが必要な場合を除いて同じことが実行されます(ただし無視します)。 Pythonのバージョン - エラーなしで返される)。
setup.py
の別の用途は、ソースからパッケージをインストールすることです。モジュールがまだ開発中の場合、wheelファイルは利用できなくなり、インストールする唯一の方法はソースから直接インストールすることです。
Python拡張モジュールを構築する:
モジュールが構築されたら、 distutils設定スクリプト を使用して配布可能なモジュールに変換することができます。これらが構築されたら、上記のコマンドを使ってインストールすることができます。
セットアップスクリプトは簡単に作成でき、ファイルが適切に設定されていればpython setup.py build
を実行してコンパイルできます(すべてのコマンドについてはリンクを参照)。
ここでもまた、使いやすさと慣例によりsetup.py
という名前が付けられていますが、任意の名前を付けることができます。
Cython:
setup.py
ファイルのもう一つの有名な用途はコンパイルされた拡張子を含みます。これらはユーザー定義の値を持つセットアップスクリプトを必要とします。それらは速い(しかしコンパイルされるとプラットフォームに依存します)実行を可能にします。これは ドキュメンテーション からの簡単な例です:
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'Hello world app',
ext_modules = cythonize("hello.pyx"),
)
これはpython setup.py build
でコンパイルできます。
Cx_Freeze:
セットアップスクリプトを必要とする他のモジュールはcx_Freeze
です。これはPythonスクリプトを実行可能ファイルに変換します。これにより、説明、名前、アイコン、パッケージなどの多くのコマンドを含めたり、除外したり、実行すると配布可能なアプリケーションを作成できます。 ドキュメント :からの例
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base)])
これはpython setup.py build
でコンパイルできます。
setup.py
ファイルとは何ですか?
簡単に言うと、Python環境で何かを構築または構成するスクリプトです。
配布時のパッケージに含まれるセットアップスクリプトは1つだけですが、複数のパッケージを1つのセットアップスクリプトにまとめることも珍しくありません。これにはdistutils
が含まれることがよくありますが、必ずしもそうとは限りません(最後の例で示したように)。覚えておくべきことは、Pythonパッケージ/スクリプトを何らかの方法で構成することだけです。
名前を付けるので、構築時またはインストール時に同じコマンドを常に使用できます。
簡単にするために、 install functions を呼び出すと、setup.pyは"__main__"
として実行されます。 setup.pyの中に、あなたはあなたのパッケージをインストールするのに必要な全てを置くべきです。
次の2つの節では、多くのsetup.pyモジュールにある2つのことについて説明します。
この関数は、プロジェクトの名前、バージョンなどの プロジェクト属性 を指定することを可能にします。 setuptools.setupの例については、 このWebページ を参照してください。
setuptools.setupのこれらの属性により、以下の種類のパッケージのインストールが可能になります。
プロジェクトにインポートされ、 PyPI にリストされている setuptools.findpackages に含まれるパッケージ:
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
パッケージは PyPI にはありませんが、 dependency_links を使用してURLからダウンロードできます。
dependency_links=["http://peak.telecommunity.com/snapshots/",]
理想的な世界では、setuptools.setup
があなたのためにすべてを処理します。残念ながら、これは必ずしもそうとは限りません。インストールしているシステムをあなたのパッケージに適した状態にするために、依存関係を subprocess コマンドでインストールするなど、特別なことをしなければならないことがあります。これを避けてみてください、これらの関数は混乱を招き、しばしば _ os _ と distribution の間でも異なります。