etc./StackOverFlow

setup.py는 무엇입니까?

청렴결백한 만능 재주꾼 2023. 4. 15. 23:23
반응형

질문자 :Software Enthusiastic


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



setup.py 는 파이썬 파일로, 설치하려는 모듈/패키지가 Python 모듈 배포 표준인 Distutils로 패키징 및 배포되었을 가능성이 있음을 나타냅니다.

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

 $ pip install .

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

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


Silfverstrom

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

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=['wheel', '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=['wheel', '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=['wheel', 'bar', 'greek'], #external packages as dependencies scripts=[ 'scripts/cool', 'scripts/skype', ] )

long_description 사용된다 pypi.org 패키지의 README 설명한다.


pip install yourpackage 사용하여 패키지를 설치할 수 있도록 PyPi.org에 패키지를 업로드할 준비가 되었습니다.

이 시점에서 두 가지 옵션이 있습니다.

  • 임시 test.pypi.org 서버에 게시하여 절차에 익숙해지도록 한 다음 대중이 패키지를 사용할 수 있도록 영구 pypi.org 서버에 게시합니다.
  • 이미 절차에 익숙하고 사용자 자격 증명(예: 사용자 이름, 암호, 패키지 이름)이 있는 경우 영구 pypi.org 서버에 즉시 게시

패키지 이름이 pypi.org에 등록되면 아무도 이를 요구하거나 사용할 수 없습니다. Python 패키징은 업로드 목적으로 꼬기 패키지 를 제안합니다(패키지를 PyPi로). 따라서,

(1) 첫 번째 단계는 다음을 사용하여 배포판을 로컬로 구축 하는 것입니다.

 # prereq: wheel (pip install wheel) $ python setup.py sdist bdist_wheel

(2) 그런 다음 test.pypi.org 또는 pypi.org에 업로드하기 위해 twine

 $ twine upload --repository testpypi dist/* username: *** password: ***

패키지가 test.pypi.org에 나타나는 데 몇 분 정도 걸립니다. 만족스러우면 다음을 사용하여 패키지를 pypi.org 의 실제 영구 인덱스에 업로드할 수 있습니다.

 $ twine upload dist/*

GPG 를 사용하여 패키지의 파일에 서명할 수도 있습니다.

 $ twine upload dist/* --sign

보너스 읽기 :


kmario23

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

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

일부 패키지는 순수 Python이며 바이트 컴파일만 가능합니다. gcc 또는 cl )와 Python 인터페이스 모듈(예: swig 또는 pyrex )이 필요한 네이티브 코드를 포함할 수 있습니다.


whatnick

루트 폴더에 "setup.py"가 있는 패키지를 다운로드한 경우 다음을 실행하여 설치할 수 있습니다.

 python setup.py install

프로젝트를 개발 중이고 이 파일이 무엇에 유용한지 궁금하다면 설정 스크립트 작성에 대한 Python 문서를 확인하십시오.


Pēteris Caune

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

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

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


Ferdinand Beyer

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

Avichal Badaya

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_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 환경에서 무언가를 빌드하거나 구성하는 스크립트입니다.

배포될 때 패키지에는 하나의 설정 스크립트만 포함되어야 하지만 여러 개를 하나의 설정 스크립트로 결합하는 것은 드문 일이 아닙니다. 이것은 종종 distutils 포함하지만 항상 그런 것은 아닙니다(지난 예에서 보여드린 것처럼). 기억해야 할 것은 Python 패키지/스크립트를 어떤 식으로든 구성한다는 것입니다.

빌드하거나 설치할 때 항상 동일한 명령을 사용할 수 있도록 이름을 사용합니다.


Simon

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 누릅니다. 완료!


G M

간단하게 하기 위해 setup.py는 언급된 다른 답변 에서 설치 기능 을 호출할 때 "__main__" setup.py 안에 패키지를 설치하는 데 필요한 모든 것을 넣어야 합니다.

일반적인 setup.py 함수

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

setuptools.setup

이 기능을 사용하면 프로젝트 이름, 버전과 같은 프로젝트 속성 을 지정할 수 있습니다.... 가장 중요한 것은 이 기능을 사용하면 다른 기능이 제대로 패키징된 경우 설치할 수 있다는 것입니다. setuptools.setup의 예는 이 웹페이지 를 참조하십시오.

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 이 모든 것을 처리합니다. 불행히도 항상 그런 것은 아닙니다. 때로는 subprocess 명령으로 종속성을 설치하는 것과 같은 특정 작업을 수행하여 패키지에 올바른 상태로 설치 중인 시스템을 가져와야 합니다. 이것을 피하십시오. 이러한 기능은 혼동을 일으키고 OS배포판 간에 종종 다릅니다.


mikeLundquist

다운로드한 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를 실행한다는 것을 이해합니다) 확실히 어색하고 거슬리는 느낌이 듭니다. 동일한 패키지 관리자 응용 프로그램에 대한 모든 명령이 조화를 이룹니다. 좋아하게 될 수도 있습니다.


Colonel Panic

출처 : http:www.stackoverflow.com/questions/1471994/what-is-setup-py

반응형