Setup.py은 (는) 무엇 이죠?


990

누구나 무엇이 무엇 setup.py이고 어떻게 구성 또는 사용할 수 있는지 설명해 주 시겠습니까?


7
에릭 : 모든 것을 하나로 모으는 더 좋은 예가 유익 할 것입니다
Das.Rot

1
필자는 다운로드 한 패키지 관리자를 가리 키지 않고 압축을 푼 패키지를 설치하고 스크립트를 실행하는 방법이 항상 이상하다고 느낍니다. 더 자연 스러울 것입니다. stackoverflow.com/questions/1471994/what-is-setup-py/…
대령 패닉

답변:


694

setup.py 파이썬 파일이며, 일반적으로 설치할 모듈 / 패키지가 Python 모듈 배포 표준 인 Distutils와 함께 패키지되고 배포되었음을 알려줍니다.

이를 통해 Python 패키지를 쉽게 설치할 수 있습니다. 종종 다음과 같이 작성하면 충분합니다.

$ pip install . 

pipsetup.py를 사용하여 모듈을 설치합니다. setup.py직접 전화하지 마십시오 .

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


9
이 모듈을 작성하거나 처리하는 방법에 대한 지식을 공유해 주시면 감사하겠습니다. 예를 들어, 기본 모듈을 작성하는 방법 또는 ./mymodule/libs/에서 가져 오는 ./mymodule/bin에서 스크립트를 테스트하는 방법
Paulo Oliveira

7
@PauloOliveira Distutils를 설명하는 Python 모듈 배포를 참조하십시오. 자세한 내용은 2. 설치 스크립트 작성을 참조하십시오 .
You

4
절대로 파이썬 setup.py 설치를 사용하지 마십시오! 버전 관리가 중단됩니다! stackoverflow.com/questions/4324558/…
devinbost

2
@MikeS 해결 방법이 무엇인지 확실하지 않지만 setup.py를 실행하면 많은 시간의 정리가 필요한 악몽 문제가 발생했습니다. pip 또는 conda로 건물 / 번들링이 해결책이라고 생각합니다.
devinbost

3
레거시가 아닌 설명서 링크 인 docs.python.org/3/installing/index.html로 링크를 변경하고 packaging.python.org/tutorials/distributing- 링크를 추가하는 것이 좋습니다 packages / # setup-pysetup.py 파일 의 목적을 설명 합니다.
Alvaro Gutierrez Perez

491

다른 프로젝트와 [I] Python 프롬프트에서 패키지 를 가져올 수 있도록 foo컴퓨터에 python 패키지를 설치하는 데 도움이됩니다 (에있을 수도 있음 virtualenv) foo.

그것은의 유사한 작업 수행 pip, easy_install


사용 setup.py

몇 가지 정의부터 시작하겠습니다.

패키지 - __init__.py파일 이 들어있는 폴더 / 디렉토리 .
모듈 - .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


12
케네스 리츠 (오래된의 저자 requests-) 명시 적으로 setup.py의 좋은 예주는이 프로젝트가 github.com/kennethreitz/setup.py
boweeb

하위 패키지, 즉 패키지 내에 모듈이있는 폴더는 어떻습니까?
fhchl

1
@ kmario23 좋은 설명 감사합니다!
Dinko Pehar

1
이 답변을 좋아합니다
SW_user2953243

1
@ SW_user2953243 유용하다고 생각합니다 :)
kmario23

98

setup.py다중 플랫폼 설치 프로그램 및 make파일에 대한 Python의 답변 입니다.

명령 줄 설치에 익숙하면로 make && make install번역됩니다 python setup.py build && python setup.py install.

일부 패키지는 순수 Python이며 바이트 컴파일 만 가능합니다. 다른 코드에는 네이티브 코드가 포함되어있을 수 있으며,이 경우 네이티브 컴파일러 (예 : gcc또는 cl)와 Python 인터페이스 모듈 (예 : swig또는 pyrex)이 필요합니다.


1
따라서 위의 비유에 따르면 어떤 이유로 모듈을 빌드하지 못하면 setup.py 스크립트로 수정하려고합니다 ... 정확합니까?
MonaLisaOverdrive

1
예, 볼 수있는 구성 파일이있을 수도 있습니다.
whatnick

3
내가 틀렸다면 정정하되, 둘 사이에는 작은 차이가 있다고 생각합니다. python setup.py install 실제로 python setup.py build먼저 실행 되므로 특정 경우를 제외하고는 별도로 실행할 필요가 없습니다. 나는 make항상 실행하기 전에 항상 수동으로 실행해야 한다고 생각 합니다 make install.
joelostblom

6
@cheflo 실제로 make는 특정 매개 변수 (또는 순서)가 필요하지 않습니다. Makefile어떤 "대상"을 사용할 수 있는지 (및 호출해야하는 순서) 작성자에게 달려 있습니다. bare Makefile는 (일반적으로) 이식성이 좋지 않기 때문에 ./configure(autotools) 또는 cmake .(cmake)와 같은 명령을 사용하여 생성되는 경향이 있으므로 이러한 프로그램에 따라 make이전 에 명시 적으로 실행해야하는지 여부를 정의해야합니다 make install.
ntninja

3
docs.python.org/3/installing/index.html 의 문서에 따라 setup.py를 더 이상 사용해야하는지 여부를 알려줄 사람이 필요합니다. distutils를 직접 사용하는 동안 단계적으로 ... "
Kemin Zhou


20

setup.py일반적으로 해당 언어로 작성된 라이브러리 또는 프로그램과 함께 제공되는 Python 스크립트입니다. 소프트웨어를 올바르게 설치하는 것이 목적입니다.

많은 패키지가 distutils와 프레임 워크를 사용합니다 setup.py.

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


19

setup.py는 두 가지 시나리오에서 사용할 수 있습니다. 먼저 Python 패키지를 설치하려고합니다. 둘째, 자신의 Python 패키지를 만들고 싶습니다. 일반적으로 표준 Python 패키지에는 setup.py, setup.cfg 및 Manifest.in과 같은 몇 가지 중요한 파일이 있습니다. Python 패키지를 만들 때이 세 파일은 (계란 정보 폴더 아래 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를 파고들 때 매우 유용합니다.
Palec

8

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

다운로드 한 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를 내부에서 실행한다는 것을 이해합니다). 모든 동일한 패키지 관리자 응용 프로그램에 대한 명령이 조화를 이룹니다. 좋아할 수도 있습니다.


1
그러면 easy_install 또는 이와 유사한 것을 사용할 수 있습니다. Btw, Python에는 계란이 있는데 루비 보석과 비슷합니다.
Pavel Šimerda

7

setup.py다른 파이썬 파일입니다. setup.py각 스크립트마다 다른 프로 시저가 없도록 명명 된 규칙을 제외하고 모든 이름을 사용할 수 있습니다 .

setup.py파이썬 모듈을 설치하는 데 가장 많이 사용되지만 서버의 다른 목적은

모듈 :

아마도 이것은 setup.py모듈에서 가장 유명한 사용법입니다 . 그들이 사용하여 설치할 수 있지만 pip, 오래된 파이썬 버전은 포함하지 않았다 pip기본적으로 그들은 별도로 설치해야 할 필요가 있었다.

모듈을 설치하고 싶지만 설치하고 싶지 않은 pip경우 setup.py파일 에서 모듈을 설치하는 것이 유일한 대안이었습니다 . 이것은를 통해 달성 될 수 있습니다 python setup.py install. 이것은 (없이 루트 사전에 파이썬 모듈을 설치합니다 pip, easy_install요법).

이 방법은 종종 pip실패 할 때 사용됩니다 . 예를 들어 원하는 패키지의 올바른 Python 버전을 pip더 이상 유지 관리하지 않기 때문에 사용할 수 없는 python setup.py install경우 컴파일 된 바이너리가 필요한 경우를 제외하고 소스를 다운로드하고 실행 하면 동일한 작업을 수행합니다 (그러나 무시할 것입니다. 파이썬 버전-오류가 반환되지 않는 한).

또 다른 용도는 setup.py소스에서 패키지를 설치하는 것입니다. 모듈이 아직 개발중인 경우 휠 파일을 사용할 수 없으며 설치하는 유일한 방법은 소스에서 직접 설치하는 것입니다.

파이썬 확장 만들기 :

모듈이 빌드되면 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입니다. 이것은 파이썬 스크립트를 실행 파일로 변환합니다. 이를 통해 설명, 이름, 아이콘, 패키지와 같은 많은 명령이 포함, 제외 및 실행 후 배포 가능한 응용 프로그램을 생성 할 수 있습니다. 설명서 의 예 :

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파일이란 무엇 입니까?

파이썬 환경에서 무언가를 구축하거나 구성하는 스크립트입니다.

배포시 패키지는 하나의 설정 스크립트 만 포함해야하지만 여러 설정을 단일 설정 스크립트로 결합하는 것은 드문 일이 아닙니다. 이것이 distutils항상 포함 되지만 항상 그런 것은 아닙니다 (마지막 예제에서 보여 주었 듯이). 그것을 기억하는 것은 어떤 식 으로든 파이썬 패키지 / 스크립트를 구성합니다.

빌드하거나 설치할 때 항상 같은 명령을 사용할 수 있도록 이름이 사용됩니다.


6

간단하게하기 위해 setup.py는 다른 함수 가 언급 한 설치 함수"__main__" 를 호출 할 때 실행됩니다 . setup.py 안에 패키지 설치에 필요한 모든 것을 넣어야합니다.

일반적인 setup.py 함수

다음 두 섹션에서는 많은 setup.py 모듈이 갖는 두 가지 사항에 대해 설명합니다.

setuptools.setup

이 기능을 사용하면 프로젝트 속성 을 지정할 수 있습니다 이름, 버전 등의 . 가장 중요한 것은이 기능을 사용하면 다른 기능이 올바르게 패키지 된 경우 설치할 수 있습니다. setuptools.setup의 예는 이 웹 페이지 를 참조하십시오. 이러한 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모든 것을 다룰 것입니다. 불행히도 항상 그런 것은 아닙니다. 하위 프로세스 명령을 사용하여 종속성을 설치하는 등 특정 작업을 수행 하여 설치중인 시스템을 패키지에 적합한 상태로 만들어야합니다. 이것을 피하려고 노력하십시오. 이러한 기능은 혼란스럽고 OS배포판에 따라 다릅니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.