데비안 패키지가 PyPI에서 파이썬 모듈을 설치하는 방법


20

이 질문은 보완하려고 이 일을 . PyPI의 타사 모듈을 사용하는 python 앱이 있습니다. 내 앱을 데비안 패키지로 패키지하고 싶지만 데비안 / 우분투 저장소에없는 파이썬 종속성을 처리하는 방법을 모르겠습니다 (데비안 패키지로 포장 됨)

해결책 # 1 :
PyPI에서 데비안 패키지로 모듈을 빌드하십시오.

해결 방법 # 2 : stdeb를
사용하는 필요한 모든 PyPI 모듈에 대한 데비안 패키지를 만들어 debian / ubuntu 리포지토리에 추가하십시오.

데비안 패키지를 가상 환경에 설치할 때 PyPI 종속성을 설치하려고하므로 실제로 솔루션 # 3이 필요합니다 !

솔루션 # 3 은 무엇입니까 ? DEBIAN / preinst 관리자 스크립트 를 조정해야 합니까?


왜 데비안 패키지를 만들어야하는지 설명 할 수 있습니까? Python 앱에 비 Python 리소스가 필요합니까?
조나단

@Jonathan 사용자가 Ubuntu Software Center에서 내 앱을 설치할 수 있기를 바랍니다. 나는 그것을 위해 * .deb가 필요하다고 생각합니다. 내 Python 앱에는 비 Python 리소스가 필요하지 않고 타사 Python 모듈 만 필요합니다.
andri_ch

@Jonathan Debian 패키지는 Ubuntu의 표준 설치 방법입니다. .deb런치 패드에서 파일을 쉽게 분배 하거나 개인 저장소 또는 PPA를 설정할 수 있습니다 .
MestreLion

답변:


20

Debian IRC 채널 irc : //irc.debian.org#debian-mentors 에서 일부 관리자와 이야기를 나 exact면서 정확히 같은 것을 요구했으며 일반적인 합의는 다음과 같습니다.

해결책 # 1 :

단일 코드베이스로 소스 파일을 복사하여 패키지에 종속성을 통합하는 것은 매우 어려워집니다. 의존성, 업데이트, 버전 관리 등을 처리하는 패키징 시스템의 목적을 무효화합니다.

해결책 # 3 :

바이너리 ( .deb)를 설치할 때 비 데비안 패키지를 즉석에서 다운로드 하는 것은 심각한 보안 위험이 될 수 있습니다. 설치시 다운로드 및 설치되기 때문에를 추출하여 종속성 을 검사 할 수도 없습니다 deb. 리포지토리 시스템을 완전히 우회하는 접근 방식입니다. root신뢰할 수없는 출처에서 신뢰할 수없는 추가 소프트웨어를 추가로 다운로드 하는 패키지 (및 기억하십시오!)에 관심이있는 사용자는 없습니다 . 예, DEBIAN/postinst(또는 preinst)를 다루고 (또는 wget귀하의 경우,pip install), 플래시, Oracle Java, Steam 및 기타 사용자가 취한 접근 방식입니다. 그러나 이것은 독점적 인 비공개 소스 소프트웨어이므로 보안은 아무 것도 아닙니다.

해결책 # 1.5 :

당신은 그것을 언급하지 않았다,하지만 당신은 단지에 종속성을 통합 할 수있는 빌드 시간 에, 즉, 소스 패키지합니다 ( .orig.tar.gz, .debian.tar.gz, .dsc은 "바이너리"패키지합니다 (을 만들 때 PyPi에서 다운로드하여, 인조) .deb). 에 대한 지침 pip install으로 갈 것 debian/rules(통보 소문자 debian는 발행 할 때와 바이너리 패키지에 반대,), 그리고 실행됩니다 debuilddpkg-buildpackage.

이것은 # 1과 # 3 사이의 중간입니다. 그것은 # 3의 문제 중 일부를 완화 (그러나 해결하지는 못합니다) : 적어도 최종 제품을 검사 할 수 .deb있으며 설치시 인터넷 액세스가 필요하지 않습니다. 모든 위험과 부담은 최종 사용자에서 패키지 관리자에게 전달됩니다. 그러나 대부분의 패키징 시스템 인프라를 우회하므로 # 1과 동일한 문제가 있습니다. Afterall는이 종속성을 처리합니다 (버전, 업데이트, 요구 사항, 충돌이) 왜 dpkg/ apt처음에 만들었습니다! :)

해결책 # 2 :

진정한 올바른 방법 ™ . 의존성에 대한 데비안 패키지를 만들고 패키지에 요구 사항으로 나열하고 모든 .debs또는 소스 패키지를 배송 합니다.

여기에는 여러 가지 옵션이 있습니다.

  • 데비안에 포함시키기 위해 소프트웨어와 그 의존성 둘 다의 소스 패키지를 제출 하십시오. 수락하면 Ubuntu와 같은 모든 파생 상품을 포함하여 모든 데비안 사용자가 자동으로 사용할 수 있습니다.

  • 소스 패키지를 Launchpad에 업로드하여 우분투 사용자 (및 Linux Mint와 같은 파생 제품)가 쉽게 추가하고 설치할 수 있는 PPA 를 만듭니다.

  • 웹 사이트에 자신의 데비안 리포지토리를 호스팅하십시오. 데비안 기반 시스템의 사용자는 추가 /etc/apt/sources.list.d하고 apt인프라를 사용 하여 위와 같이 다운로드, 설치 및 업데이트 할 수 있습니다!

  • .deb직접 다운로드 및 설치를 위해 파일을 호스팅하십시오 . 아니 apt거나 자동 업데이트는 생각과 관련이 있습니다.

에 관해서는 방법 (! 너무하고 파이썬 소프트웨어) 당신의 PyPi 종속성을 포장하는 도구 쉬운 과정을 참조가 있습니다 :

그리고 많은 유용한 참고 자료 :

도움이 필요하다? 그것들을 확인하십시오 :



2

pypi2debpypi에서 패키지를 가져 와서는 DEB 패키지로 만들 수 있습니다.


0

그것들은 펄의 cpan과 같지 않습니다. 리포지토리에 있다면 apt-get으로 설치할 수 있습니다. pip로 설치할 수 없다면 / usr / local에 pip 설치가 있어야합니다.

pip로 설치하려면 다음을 수행하십시오.

apt-get install python-pip 
pip install foopackage 

예를 들면 다음과 같습니다.

pip install MultipartPostHandler2

이것은 OP의 질문에 대답하지 않습니다. 문제는 'apt-get <custom-package>'또는 'dpkg -i <custom-package>'가 PyPi에서 Python 종속성을 가져 오도록 PyPi에서 Python 패키지를 설치하는 방법입니다.
SevakPrime

그것들은 펄에 cpan과 같지 않습니다. 리포지토리에 있다면 apt-get으로 설치할 수 있습니다 .pip로 설치할 수 없다면 pip 설치는 / usr / local에 있지만 차이점은 내 답변을 삭제하는 것이 좋습니다.
Sérgio

귀하의 의견은 OP의 질문에 대한 적절한 답변을 제공합니다. 당신은 그 의견을 당신의 대답에 넣어 투표해야합니다. (예를 들어, MestreLion의 답변을 참조하십시오.) 귀하의 답변은 OP의 질문에 답변하지 않습니다.
SevakPrime
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.