setup.pyとは何ですか?
-
16-09-2019 - |
質問
誰か説明してくれませんか、それは何ですか setup.py
また、どのように設定または使用できるのでしょうか?
解決
setup.py
は通常、インストールしようとしているモジュール/パッケージは、パッケージとPythonモジュールを配布するための標準であるDistutilsは、一緒に配布されたことを示していますPythonのファイルが、ある。
これは、あなたが簡単にPythonパッケージをインストールすることができます。多くの場合、それは書くために十分です。
$ pip install .
pip
は、あなたのモジュールをインストールするには、setup.pyを使用します。直接setup.py
を呼び出すことは避けてください。
https://docs.python.org/3/installing/ index.htmlを#のインストールインデックスの
他のヒント
Python パッケージのインストールに役立ちます foo
マシン上 (または virtualenv
) パッケージをインポートできるようにします foo
他のプロジェクトや [I]Python プロンプトから。
それは同様の仕事をします pip
, easy_install
等。、
使用する setup.py
いくつかの定義から始めましょう。
パッケージ - が含まれるフォルダー/ディレクトリ __init__.py
ファイル。
モジュール - 有効な Python ファイル .py
拡大。
分布 - どうやって パッケージ 他に関係する パッケージ そして モジュール.
という名前のパッケージをインストールするとします。 foo
. 。そうすれば、
$ git clone https://github.com/user/foo
$ cd foo
$ python setup.py install
実際にインストールしたくないが、使用したい場合は、代わりに。それから、そうしてください、
$ python setup.py develop
このコマンドは、内容をコピーするのではなく、サイト パッケージ内のソース ディレクトリへのシンボリック リンクを作成します。このため、非常に高速です (特に大きなパッケージの場合)。
作成 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='foomail@foo.com',
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='foomail@foo.com',
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='foomail@foo.com',
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
等)ネイティブコンパイラを必要とするネイティブコード、及び(swig
又はpyrex
など)Pythonのインターフェースモジュールを含んでいてもよい。
あなたがルートフォルダに「setup.py」を持っているパッケージをダウンロードした場合、あなたが実行してインストールすることができます。
python setup.py install
プロジェクトを開発していると、このファイルは便利ですかと思っている場合は、 setup.py
は、その言語で書かれた、通常のライブラリやプログラムに同梱されているPythonスクリプトです。これは、ソフトウェアが正しくインストールされ目的です。
多くのパッケージはdistutils
と接続詞でsetup.py
フレームワークを使用します。
setup.pyは、2つのシナリオで使用することができ、第一に、あなたは、Pythonパッケージをインストールします。第二に、あなたはあなた自身のPythonパッケージを作成したいです。通常、標準のPythonパッケージはsetup.py、のsetup.cfgとManifest.inなどの重要なファイルのカップルを持っています。あなたがPythonパッケージを作成している場合は、これらの3つのファイルが(卵インフォフォルダの下PKG-INFOの内容)名、バージョン、説明、(通常は.txtファイルで)他の必要なインストールや他のいくつかのパラメータを決定します。パッケージが作成されている間のsetup.cfgは(tar.gz形式かもしれない)setup.pyによって読み取られます。あなたは、パッケージに含まれるべきものを定義することができる場所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
あなたはsetup.py
でパッケージをダウンロードすると、あなたのターミナル(Mac用、Linux)またはコマンドプロンプト(Windows)を開きます。 cd
を使用すると、タブのボタンであなたを支援することは右のファイルをダウンロードし、setup.py
があるしているフォルダへのパスを設定します:
iMac:~ user $ cd path/pakagefolderwithsetupfile/
を押して、あなたがこのようなものが表示されるはず、入力します:
iMac:pakagefolderwithsetupfile user$
次に、このpython setup.py install
後に入力します:
iMac:pakagefolderwithsetupfile user$ python setup.py install
を押しenter
。完了!
あなたがダウンロードしたPythonパッケージをインストールするには、アーカイブを解凍し、内部のsetup.pyスクリプトを実行します:
python setup.py install
私にとって、これは常に奇妙に感じました。 1は、RubyやNodejsに行うように例えば、ダウンロード時にパッケージマネージャを指すように、より自然だろう。 gem install rails-4.1.1.gem
パッケージマネージャは、あまりにもより快適です。それがパッケージに固有なので一方、各setup.py
は、新規です。それは「私はこのsetup.pyは、私が過去に使用している他の人と同じコマンドを取る信頼」大会への信仰が求められています。それは精神的な意志の力に残念税です。
私は(私はピップがちょうど内部setup.pyを実行し理解)setup.pyワークフローは、パッケージマネージャよりも安全であるとは言わないよ、確かに私はそれがawkardと耳障りだと感じ。コマンドはすべて同じパッケージマネージャアプリケーションにあることに調和があります。あなたもそれを好きに育つかもしれません。
setup.py
他のファイルと同様の Python ファイルです。慣例による名前を除いて、任意の名前を付けることができます。 setup.py
そのため、各スクリプトで異なる手順が発生することはありません。
最も頻繁に setup.py
Python モジュールをインストールするために使用されますが、他の目的にも使用されます。
モジュール:
おそらくこれが最も有名な使用法です setup.py
モジュール内にあります。を使用してインストールできますが、 pip
, 、古い Python バージョンには含まれていませんでした。 pip
デフォルトでは、それらは個別にインストールする必要がありました。
モジュールをインストールしたかったがインストールしたくない場合 pip
, 、ほぼ唯一の代替手段は、からモジュールをインストールすることでした setup.py
ファイル。これは次の方法で実現できます。 python setup.py install
. 。これにより、Python モジュールがルート辞書にインストールされます ( pip
, easy_install
など)。
この方法は、次のような場合によく使用されます。 pip
失敗します。たとえば、目的のパッケージの正しい Python バージョンが次の方法で入手できない場合、 pip
おそらく、もうメンテナンスされていないため、ソースをダウンロードして実行しています python setup.py install
コンパイルされたバイナリが必要な場合を除いて、同じことを実行します (ただし、エラーが返されない限り、Python のバージョンは無視されます)。
別の使い方 setup.py
ソースからパッケージをインストールすることです。モジュールがまだ開発中の場合、ホイール ファイルは利用できず、インストールする唯一の方法はソースから直接インストールすることです。
Python 拡張機能の構築:
モジュールが構築されたら、次のコマンドを使用して、配布可能なモジュールに変換できます。 distutils セットアップ スクリプト. 。構築したら、上記のコマンドを使用してインストールできます。
セットアップ スクリプトは簡単に構築でき、ファイルが適切に設定されたら、次のコマンドを実行してコンパイルできます。 python setup.py build
(すべてのコマンドについてはリンクを参照してください)。
またしても名付けられました setup.py
使いやすさと慣例により、任意の名前を付けることができます。
サイソン:
もう一つの有名な使い方は、 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_フリーズ:
セットアップ スクリプトを必要とする別のモジュールは次のとおりです。 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 パッケージ/スクリプトを何らかの方法で設定するだけです。
名前を取得するので、ビルドまたはインストール時に常に同じコマンドを使用できます。
簡単にするために、setup.py は次のように実行されます。 "__main__"
電話をかけるとき 機能をインストールする 他の回答も言及しました。setup.py 内には、パッケージのインストールに必要なものをすべて入れる必要があります。
一般的な setup.py 関数
次の 2 つのセクションでは、多くの setup.py モジュールが持つ 2 つのことについて説明します。
セットアップツール.セットアップ
この機能を使用すると、次のことを指定できます。 プロジェクトの属性 プロジェクト名やバージョンなど...最も重要なのは、この機能を使用すると、他の機能が適切にパッケージ化されていればそれらをインストールできるということです。見る このウェブページ setuptools.setup の例
setuptools.setup のこれらの属性により、次のタイプのパッケージのインストールが可能になります。
プロジェクトにインポートされ、リストされるパッケージ PyPI を使用して setuptools.findpackages:
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
入っていないパッケージ PyPI, 、ただし、次を使用して URL からダウンロードできます。 依存関係_リンク
dependency_links=["http://peak.telecommunity.com/snapshots/",]
カスタム機能
理想的な世界では、 setuptools.setup
あなたの代わりにすべてを処理します。残念ながら、常にそうとは限りません。依存関係をインストールするなど、特定のことを行う必要がある場合があります。 サブプロセス コマンドを使用して、インストール先のシステムをパッケージに適した状態にします。これらの関数は混乱を招き、多くの場合、次の関数と次の関数の間で異なるため、これを避けるようにしてください。 OS そしてさらに 分布.