2012-06-27 4 views
10

일반 Python 모듈 외에도 /usr/local/lib/python2.7/dist-package/mylibrary에 들어가야하는 데이터 파일이있는 Python 라이브러리가 있습니다.setup.py 데이터 파일을 설치하지 않음

아쉽게도 setup.py가 실제로 데이터 파일을 설치하도록 설득 할 수 없었습니다. 이 동작은 sdist가 아니라 설치 중임을 유의하십시오. 여기

이 setup.py

module_list = list_of_files 

setup(name   ='Modules', 
     version  ='1.33.7', 
     description ='My Sweet Module', 
     author  ='PN', 
     author_email ='email', 
     url   ='url', 
     packages  = ['my_module'], 

# I tried this. It got installed in /usr/my_module. Not ok. 

     # data_files = [ ("my_module", ["my_module/data1", 
     #         "my_module/data2"])] 

# This doesn't install it at all. 
     package_data = {"my_module" : ["my_module/data1", 
            "my_module/data2"] } 
    ) 

이 파이썬 2.7에의 약간 편집 됨 버전입니다 (결국 2.6에서 실행해야합니다), 그리고 10.04와 12 + 사이에 약간의 우분투에서 실행해야합니다. 12.04에 지금 개발하십시오. 디렉토리가 확장 모듈을 포함하는 패키지의 설치 접두사 (순수 파이썬 패키지에 대한 파이썬의 sys.prefix, sys.exec_prefix에 상대 경로, 그것은 해석 상대 인 경우

답변

4

http://docs.python.org/distutils/setupscript.html#installing-additional-files

).

이것은 아마 그것을 할 것입니다 :

data_files = [ ("my_module", ["local/lib/python2.7/dist-package/my_module/data1", 
           "local/lib/python2.7/dist-package/my_module/data2"])] 

하거나 접두사 추가 조인을 사용 :

data_dir = os.path.join(sys.prefix, "local/lib/python2.7/dist-package/my_module") 
data_files = [ ("my_module", [os.path.join(data_dir, "data1"), 
           os.path.join(data_dir, "data2")])] 
+0

흠. 경로를 하드 코드하기를 꺼려하지만, 지금은 도움이 될 것입니다. –

+4

distutils.sysconfig.get_python_lib() + "path"를 사용하여 키로 사용했습니다. –

+0

이것은 올바른 방법이 아닙니다. 'data_files'는/usr에 두려고하는 파일들을위한 것입니다 (예를 들어, 아이콘, .desktop 파일들 등). 파이썬 모듈과 함께 데이터를 포함 시키려면'include_package_data = True' 플래그와 함께'package_data'를 사용하십시오. – Grumbel

13

UPD : package_data 포맷 {'package': ['list', 'of?', 'globs*']}에서 딕셔너리가 수락을 그렇게 만들기 위해 그것은 작동합니다. 하나는 배포판 루트에 상대적인 파일 경로가 아니라 package dir에 관련된 쉘 글로브를 지정해야합니다.

data_files은 다른 의미를 가지며 일반적으로이 매개 변수를 사용하지 않아야합니다. setuptools에 만 include_package_data=True 필요하지만, 데이터 파일 setuptools에 알려진 버전 제어 시스템, 아래에 있어야한다으로

(기본적 단지 CVS와 SVN을 인식하여이 자식을 사용하는 경우 setuptools-git 또는 setuptools-hg를 설치하거나 HG ...)

setuptools에와

을 수행 할 수 있습니다

- MANIFEST.im 지역 :

include my_module/data* 

- setup.py에서 :

setup(
     ... 
     include_package_data = True, 
     ... 
    ) 
+0

hm. 이것은 조금 부족합니다. 각각의 행동이 무엇을하는지 자세히 설명해 주시겠습니까? 그리고 나는 둘 다 또는 둘 중 하나를해야합니까? –

+0

https://pythonhosted.org/setuptools/setuptools.html # include-data-files – podshumok

+0

이것은 플랫폼과 독립적으로 작동하는 방법입니다. 수락 된 답변을 Mac OS에서 사용했지만 Linux VM에서는 데이터 파일이 이상한 곳으로 복사되었습니다. –

관련 문제