2013-08-16 4 views
2

내 패키지는 최신 버전의 jsonpickle 패키지에 종속됩니다. 이전 버전은 pip를 통해 설치할 수 있지만 작동하려면 최신 버전 (예 : Github)이 필요합니다. 이 상황에서 jsonpickle의 최신 버전을 내 코드에 묶는 것이 일반적으로 괜찮은 것으로 간주됩니까? 다른 해결책이 있습니까? 차라리 내 사용자가 github에서 복제하지 않도록 요청하고 싶습니다.Python 패키지 가져 오기 하위 패키지 - 우수 사례?

나는이처럼 내 패키지를 정리 생각 해요 : Python: importing a sub‑package or sub‑module

+1

사람들을 복제하고 수동으로 빌드하고 설치하지 않으려면 git + https : //github.com/foo/bar를 모두 투명하게 설치하십시오. PyPI를 업데이트 할 때까지 허용되는 임시 해결책입니까? – abarnert

+0

결국에는 @ abarnet의 해결책을 찾아갔습니다.이 테스트는 일시적인 수정으로 모든 테스트가 통과 한 것 같습니다.그 동안 나는 jsonpickle 친구들에게 최신 버전을 pypi에 업로드하도록 시도하고 버그를 일으킬 것입니다. –

답변

3

, 이것은 일반적으로 좋은 생각이 아니다. 그것은 다른 패키지에 비우호적 인 것처럼 "당황 스럽다"는 것이 아니라, 그것은 당신과 당신의 사용자들에게 유지 관리 부담을 초래한다는 것입니다. (사용자에게 영향을 미치는 jsonpickle에 수정 된 버그가 있다고 가정하지만 아직 수정 사항을 선택하지 않은 경우 정상적으로 수행 한 경우 업그레이드는 jsonpickle이지만, 내부 사본을 사용하여 그들은 jsonpickle 소스와 당신의 패키지를 해킹하고, 패키지를 해킹하고, 수동으로 모두 설치해야합니다.)

때로는 여전히 가치가 있습니다. 예를 들어, 매우 인기있는 requests 모듈에는 urllib3과 같은 다른 패키지가 its own copy 포함되어 있습니다. 그리고 그렇습니다. 위에서 설명한 두 가지 비용에 직면합니다. 그러나 이는 또한 request의 각 버전이 urllib3의 정확한 특정 버전에 의존 할 수 있음을 의미합니다. requests은 드물게 사용되는 인터페이스 인 urllib3을 많이 사용하고 알려진 버그 중 일부에 대한 해결 방법을 제공하기 때문에 유용 할 수 있습니다.

귀하의 경우에는 문제가되지 않습니다. 업스트림 관리자가 새 버전을 PyPI에 업로드 할 때까지는 번들 한 버전 인 jsonpickle이 일시적으로 필요합니다. 문제는 사용자가 모두 다른 버전을 사용하는 것을 원하지 않는다는 것이 아닙니다. Repo를 복제하고 수동으로 설치하는 방법을 강요하고 싶지는 않습니다. 다행히 pip 한 줄에 어려움의 대부분을 포장하여 당신을 위해 처리합니다 :

pip install git+https://github.com/foo/bar 

그것은 아름다운 해결책은 아니지만, 바로 일시적입니까?

2

그것은 일반적으로 하지 프로젝트와 의존 관계 (dependencies)를 번들하는 가장 좋은 아이디어 :

My package 
    | 
__init__.py 
file1.py 
file2.py 
      \ 
     jsonpickle (latest) 

즉 여기 다 있었는지 이렇게. 어쨌든 일부 프로젝트는 시스템 패키지를 사용할 수없는 경우이를 대체하거나 대안으로 번들링합니다. (이것은 주로 Python이 아닌 C 프로젝트에서 찾을 수 있습니다.)

"최신"이 정확히 무엇을 의미하는지 언급하지 않았습니다. 이게 파이피의 최신인가?

패키지의 특정 버전 또는 기본 버전보다 큰 버전을 설치하는 가장 좋은 방법은 setup.py requires 섹션에서 요구 사항을 올바르게 지정하는 것입니다. 여기에 필요한 것에 대해 더 읽어보십시오 [1]. 이런 식으로 pip는 의존성을 해결할 수 있으며, pypi에서 사용할 수 있다면 자동으로됩니다. KAG가 말한대로

[1] http://docs.python.org/2/distutils/setupscript.html#relationships-between-distributions-and-packages

+0

나는 그것이 일반적으로 가장 잘 피할 수 있다는 것에 완전히 동의하지만,이 상황에서 나는 오히려 붙어있다. 최신 나는 github에 대한 최신 정보를 가지고 있고, pypi의 버전은 너무 오래되었다. 나는 그것을 업데이트하는 것에 관해서 개발자들에게 연락했지만, 그 동안에는 해결책이 필요하다. –

+1

사실, 파이썬에서는 드문 일이 아닙니다. 예를 들어, 매우 인기있는 ['requests'] (http://docs.python-requests.org/en/latest/) 모듈에는 [자체 복사본] (https://github.com/kennethreitz/requests/tree)이 포함되어 있습니다./master/requests/packages)와 같은 다른 패키지들 ([urllib3'] (http://urllib3.readthedocs.org/en/latest/))을 제공합니다. 당신은 그것을 피하는 것이 가장 좋지만, 할 수없는 부분이 있습니다. – abarnert

+0

나는 피할 수없는 경우가있을 수 있다는 것에 동의하지만 일반적으로 일반적으로 그렇게하지는 않습니다. 왜 요청이 이것을하는지 알고 있습니까? 어쩌면 그것들은 (특별히 패치 된 버전 인 것 같은) 좋은 이유가 있을지 모르지만, 나는 이것을 소스로 만들었던 많은 파이썬 패키지를 기억하지 못합니다. 파이썬이 하나의 사실상 저장소를 가지고 있다고 생각할 수 있습니다. C 프로젝트에서 발견 된 이유는 C 커뮤니티를위한 pypi-equivalent가 없다는 것입니다. – kag