web-dev-qa-db-ja.com

Setup.pyとは何ですか?

setup.pyとは何ですか、またどのように設定または使用できますか。

737

setup.pyはpythonファイルです。通常、インストールしようとしているモジュール/パッケージは、Pythonモジュールを配布するための標準であるDistutilsでパッケージ化され、配布されていることを示しています。

これにより、Pythonパッケージを簡単にインストールすることができます。多くの場合、それを書くのに十分です:

$ python setup.py install

そしてモジュールはそれ自身をインストールします。

https://docs.python.org/3/installing/index.html#installing-index

497
Silfverstrom

あなたが他のプロジェクトや[I] Pythonプロンプトからfooパッケージをインポートできるようにあなたのマシンにpythonパッケージvirtualenvをインストールするのを助けます(fooにもあり得ます)。

pipeasy_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_descriptionpypi.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

302
kmario23

setup.pyは、マルチプラットフォームのインストーラとmakeファイルに対するPythonの答えです。

コマンドラインインストールに慣れている場合は、make && make installpython setup.py build && python setup.py installに変換されます。

一部のパッケージは純粋なPythonで、バイトコンパイルのみです。他の人はネイティブコードを含むかもしれません、それはネイティブコンパイラ(gccclのような)とPythonインターフェースモジュール(swigpyrexのような)を必要とします。

84
whatnick

ルートフォルダに "setup.py"を含むパッケージをダウンロードした場合は、次のコマンドを実行してインストールできます。

python setup.py install

あなたがプロジェクトを開発していて、このファイルが何に役立つのか疑問に思っているのであれば、 セットアップスクリプトを書くことについてのPythonのドキュメント

45
Pēteris Caune

setup.pyは通常その言語で書かれたライブラリやプログラムに同梱されているPythonスクリプトです。その目的は、ソフトウェアを正しくインストールすることです。

多くのパッケージは、setup.pyと組み合わせてdistutilsフレームワークを使用します。

http://docs.python.org/distutils/ /

18
Ferdinand Beyer

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
16
Avichal Badaya

ダウンロードしたPythonパッケージをインストールするには、アーカイブを解凍し、その中にあるsetup.pyスクリプトを実行します。

python setup.py install

私には、これはいつも変に感じました。 RubyやNodejsのように、ダウンロードをパッケージマネージャに向けるのはより自然です。 gem install Rails-4.1.1.gem

パッケージマネージャは、慣れ親しんだ信頼性があるので、より快適です。一方、それぞれのsetup.pyは小説です。なぜならそれはパッケージに固有のものだからです。それは慣習への信仰を要求します。それは精神的意志力に対する遺憾な課税です。

Setup.pyのワークフローがパッケージマネージャほど安全ではないと言っているわけではありません(私はPipがsetup.pyを内部で実行するだけであることを理解しています)。すべてのコマンドが同じパッケージマネージャアプリケーションに対するものであるという調和があります。あなたはそれが好きになるかもしれません。

7
Colonel Panic

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を押します。完了しました。

7
G M

setup.pyは他のPythonファイルです。慣習的にsetup.pyという名前が付けられていることを除いて、名前は任意ですが、スクリプトごとに異なる手順はありません。

ほとんどの場合、setup.pyはPythonモジュールのインストールに使用されますが、その他の目的にはサーバーとして使用されます。

モジュール:

おそらくこれはsetup.pyの最も有名な使い方はモジュールの中です。それらはpipを使ってインストールすることができますが、古いPythonバージョンはデフォルトではpipを含んでおらず、それらは別々にインストールする必要がありました。

モジュールをインストールしたいがpipをインストールしたくない場合は、setup.pyファイルからモジュールをインストールするしかありません。これはpython setup.py installで実現できます。これはPythonモジュールを(pipeasy_installectなしで)ルート辞書にインストールするでしょう。

このメソッドは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パッケージ/スクリプトを何らかの方法で構成することだけです。

名前を付けるので、構築時またはインストール時に同じコマンドを常に使用できます。

4
Simon

簡単にするために、 install functions を呼び出すと、setup.pyは"__main__"として実行されます。 setup.pyの中に、あなたはあなたのパッケージをインストールするのに必要な全てを置くべきです。

一般的なsetup.py関数

次の2つの節では、多くのsetup.pyモジュールにある2つのことについて説明します。

setuptools.setup

この関数は、プロジェクトの名前、バージョンなどの プロジェクト属性 を指定することを可能にします。 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 の間でも異なります。

2
user4757074