誰もsetup.py
がそれをどのように構成または使用できるかを説明できますか?
誰もsetup.py
がそれをどのように構成または使用できるかを説明できますか?
回答:
setup.py
これは通常、インストールしようとしているモジュール/パッケージが、Pythonモジュールの配布の標準であるDistutilsでパッケージ化および配布されていることを通知するpythonファイルです。
これにより、Pythonパッケージを簡単にインストールできます。多くの場合、これで十分です:
$ pip install .
pip
setup.pyを使用してモジュールをインストールします。setup.py
直接呼び出すことは避けてください。
https://docs.python.org/3/installing/index.html#installing-index
setup.py
ファイルの目的を説明します。
他のプロジェクトや[I] Pythonプロンプトからパッケージをインポートできるようfoo
に、マシンにpythonパッケージをインストールするのに役立ちます(にもインストールできますvirtualenv
)foo
。
等の同様の仕事をpip
しeasy_install
ます、
使用する setup.py
いくつかの定義から始めましょう:
パッケージ - __init__.py
ファイルを含むフォルダー/ディレクトリ。
モジュール - .py
拡張子が付いた有効なPythonファイル。
配布 -1つのパッケージと他のパッケージおよびモジュールとの関係。
という名前のパッケージをインストールするとします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
requests
)は、setup.pyの良い例を明示的に示すこのプロジェクトを持っています-github.com/kennethreitz/setup.py
setup.py
マルチプラットフォームのインストーラーとmake
ファイルに対するPythonの答えです。
コマンドラインのインストールに慣れている場合は、にmake && make install
変換されpython setup.py build && python setup.py install
ます。
一部のパッケージは純粋なPythonであり、バイトコンパイルのみです。その他には、ネイティブコードが含まれている場合があります。これには、ネイティブコンパイラ(gcc
またはcl
)とPythonインターフェースモジュール(swig
またはpyrex
)が必要です。
python setup.py install
実際にpython setup.py build
最初に実行されます(特定の場合を除いて、個別に実行する必要はありません)。をmake
実行する前に、常に手動で実行する必要があると思いますmake install
。
make
は特定のパラメーター(または順序付け)は必要ありません。Makefile
使用可能な「ターゲット」(およびそれらを呼び出す必要がある順序)の作成者次第です。ベアMakefile
sは(通常)移植性が低いため、./configure
(autotools)やcmake .
(cmake)などのコマンドを使用して生成される傾向があり、そのため、これらのプログラムでmake
前に明示的に実行する必要があるかどうかを定義する必要がありますmake install
。
ルートフォルダーに「setup.py」が含まれているパッケージをダウンロードした場合は、次のコマンドを実行してインストールできます。
python setup.py install
プロジェクトを開発していて、このファイルが何に役立つのか疑問に思っている場合は、セットアップスクリプトの記述に関するPythonのドキュメントを確認してください。
setup.py
通常、ライブラリまたはプログラムに同梱されているPythonスクリプトで、その言語で書かれています。その目的は、ソフトウェアの正しいインストールです。
多くのパッケージは、と組み合わせてdistutils
フレームワークを使用しsetup.py
ます。
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 --help-commands
。setup.pyを掘り下げるときに非常に役立ちます。
setup.py
ターミナル(Mac、Linux)またはコマンドプロンプト(Windows)を開いてパッケージをダウンロードする場合。cd
タブボタンを使用して支援することにより、ファイルをダウンロードしたフォルダーのあるフォルダーへのパスを設定しますsetup.py
。
iMac:~ user $ cd path/pakagefolderwithsetupfile/
Enterキーを押すと、次のように表示されます。
iMac:pakagefolderwithsetupfile user$
次に、この後に入力しますpython setup.py install
。
iMac:pakagefolderwithsetupfile user$ python setup.py install
を押しenter
ます。できた!
ダウンロードしたPythonパッケージをインストールするには、アーカイブを抽出し、内部でsetup.pyスクリプトを実行します。
python setup.py install
私にとって、これはいつも変わった感じがしました。RubyやNodejsで行うように、ダウンロードでパッケージマネージャーを指定するほうが自然です。gem install rails-4.1.1.gem
パッケージマネージャーも、使い慣れていて信頼できるので、より快適です。一方、setup.py
パッケージに固有であるため、どちらも斬新です。「私はこのsetup.pyが過去に使用した他のコマンドと同じコマンドを使用することを信頼する」という慣習への信仰を要求します。それは精神的な意志力に対する残念な税金です。
setup.pyワークフローはパッケージマネージャーよりも安全性が低いと言っているわけではありませんが(Pipは内部でsetup.pyを実行するだけだと理解しています)、確かにそれは奇妙で不快なものだと感じています。同じパッケージマネージャーアプリケーションに対するすべてのコマンドに調和があります。あなたもそれが好きになるかもしれません。
setup.py
他と同様のPythonファイルです。setup.py
各スクリプトに異なる手順が存在しないように、規則に従って名前が付けられている場合を除いて、任意の名前を付けることができます。
最も頻繁setup.py
に使用されるのはPythonモジュールのインストールですが、その他の目的で使用されます。
モジュール:
おそらくこれはsetup.py
、モジュールでのisの最も有名な使用法です。これらはを使用してインストールできますが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
ファイルのもう1つの有名な使用法として、コンパイルされた拡張機能があります。これらには、ユーザー定義の値を持つセットアップスクリプトが必要です。これらは、高速に(ただし、コンパイルするとプラットフォームに依存します)実行できます。ドキュメントの簡単な例を次に示します。
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パッケージ/スクリプトを構成するだけです。
名前が付けられるため、ビルドまたはインストール時に常に同じコマンドを使用できます。
簡単にするために、setup.pyは"__main__"
、インストール関数を呼び出すときと同じように実行されます。setup.py内に、パッケージのインストールに必要なすべてのものを配置する必要があります。
次の2つのセクションでは、多くのsetup.pyモジュールが持つ2つのことについて説明します。
この関数を使用すると、プロジェクトの名前、バージョンなどのプロジェクト属性を指定できます。最も重要なのは、この関数を使用すると、適切にパッケージ化されている他の関数をインストールできます。setuptools.setupの例については、このWebページを参照してください。setuptools.setupの
これらの属性により、次のタイプのパッケージをインストールできます。
プロジェクトにインポートされ、setuptools.findpackagesを使用してPyPIにリストされているパッケージ:
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
PyPIにないパッケージですが、dependency_linksを使用してURLからダウンロードできます
dependency_links=["http://peak.telecommunity.com/snapshots/",]
理想的な世界でsetuptools.setup
は、あなたのためにすべてを扱います。残念ながら、これは常に当てはまるとは限りません。場合によっては、サブプロセスコマンドを使用して依存関係をインストールするなど、特定のことを実行して、インストールするシステムをパッケージに適した状態にする必要があります。これを回避しようとすると、これらの機能は混乱し、OSとディストリビューションの間で異なることがよくあります。