2012-08-07 2 views
4

좋아, C 모듈이 들어있는 사전 빌드 된 Python 패키지를 만들고 싶습니다.OSX에 미리 빌드 된 Python 패키지

pip install whatevertarballgetsproduced.tar.gz 

을하고 MyLibrary를 사용할 수있을 것입니다 : 그것은 그것의 끝에서 내 모듈을 사용하는 데 필요한 모든 것을 포함하고, 즉 마지막에 내가 할 수있는, 수 설치 핍있는 타르볼을 갖고 싶어한다 . 또한 가상 환경 친화적이어야합니다.

내 현재 디렉토리 구조는 다음과 같습니다

입니다
project/ 
    + setup.py 
    + mylibrary/ 
     + __init__.py 
     + mylibrary.py 
     + _mylibrary.so 
    + README 

, 컴파일 된 C 라이브러리 _mylibrary.so입니다. 이 파일이 파생 된 C 소스는 이 아니며이 tarball에 포함됩니다. 나는 또한 이것을 OSX (Lion)에서하고있다. mylibrary.py에는 C 라이브러리 코드에 대한 파이썬 래퍼가 포함되어 있습니다.

어떻게해야합니까? 내가 python setup.py bdist 일을 생각했지만 이것은 정말로 내가 원하던 것이 아니다. (내가 만든 tarball이 pip install-able이 아닌 것을 놓치지 않는 한). 완료를 위해서

, 내 setup.py은 다음과 같습니다

from setuptools import setup 

setup(
    name='mylibrary_py3mac', 
    version='0.1.1', 
    description='My library which is tied to OSX & Python 3', 
    long_description=open('README').read(), 
    packages=['mylibrary'], 
    classifiers = [ 
     'Intended Audience :: Developers', 
     'License :: OSI Approved :: BSD License', 
     'Operating System :: MacOS :: MacOS X', 
     'Programming Language :: Python :: 3', 
    ], 
) 

주, 나는 공개적으로 타르볼을 배포 할 계획이없는, 그것은 내부 배포 용으로 만 (그래서 내가 돈 이유 '입니다 OSX에서만 미리 컴파일되거나 묶여 야 함).

답변

0

아담, 시도해 봤어 setup.py bdist_egg?

easy_install을 사용하여 설치할 수있는 달걀 파일을 만듭니다 (불행히도 pip이 아님).

또한 프로젝트에 누락되었습니다 (mylibrary/__init__.py).

일단 누락 된 "init"파일을 추가하면 setup.py이 결과 파일에 "so"파일을 포함시킬만큼 똑똑한 지 알고 싶어합니다. 어떻게 든 그것을 자극 할 기회가 있습니다. (나 자신이 ".so"파이썬 확장을 처리 할 이유가 없으므로 어떻게 해야할지 모르겠습니다.)

다음 예에서는 setup.py bdist_egg을 사용하여 작성한 gevent-1.0b2-py2.7-macosx-10.4-x86_64.egg이 있습니다. 나는 그것을 현재 디렉토리의 pypi/ 디렉토리에 두었습니다. 전략적으로 동일한 pypi/ 디렉토리에 배치 된 다른 종속성이 발생한다는 것을 알고 있습니다.

easy_install --allow-hosts=None \ 
      --find-links=pypi/ \ 
      --always-unzip \ 
      pypi/gevent-1.0b2-py2.7-macosx-10.4-x86_64.egg 

별도의 의존성이없는 것 같아서 사례가 더 간단합니다. setup.py bdist_egg가 호출 될 때, 내장 된 계란 파일이 어디로 dist/ 디렉토리는

easy_install --always-unzip \ 
      dist/mylibrary_py3mac-0.1.1-py2.7-macosx-10.4-x86_64.egg 

하는 것으로 : 그래서 당신이 뭔가를 할 것입니다.

+0

'__init __. py'를 포함하는 것을 잊어 버렸습니다. 지적 해 주셔서 고맙습니다. 당신의 질문에 대답하기 위해서 : 나는 달걀을 만들려고했으나, 당신이 말한대로 .egg는 Pip과 함께 작동하지 않으며, 그것은 나를위한 핵심 요구 사항입니다. –

+0

Pip으로 패키지를 설치할 때 Python 가상 환경을 대상으로합니까, 아니면 글로벌 사이트 패키지에 직접 설치합니까?앞의 경우, Pip 요구 사항은 현대적인'virtualenv'가 pip와 easy_install을 번들로 묶어두기 때문에 문제가 될 수 있습니다. 따라서 pip에 피쳐가 없으면 그림과 같이 easy_install을 사용할 수 있습니다. –

+0

사실 두 경우 모두 내 전역 사이트 패키지를 대상으로해야하며 다른 경우에는 가상 환경을 사용하게됩니다. 또한 pip 요구 사항 파일에 지정된 다른 많은 의존성을 가지고 있으므로이 프로젝트의 패키지 관리를 위해'easy_install'과'pip'를 섞어 놓지 않아도됩니다. –

관련 문제