2009-05-01 3 views
9

distutils으로 파이썬 배포판을 빌드하려고합니다. 불행하게도, 내 디렉토리 구조는 다음과 같습니다내 setup.py가 파일에 상대 경로를 사용하도록하려면 어떻게해야합니까?

 
/code 
    /mypackage 
     __init__.py 
     file1.py 
     file2.py 
     /subpackage 
      __init__.py 
    /build 
     setup.py 

여기 내 setup.py 파일입니다 :

from distutils.core import setup 

setup(
    name = 'MyPackage', 
    description = 'This is my package', 
    packages = ['mypackage', 'mypackage.subpackage'], 
    package_dir = { 'mypackage' : '../mypackage' }, 
    version = '1', 
    url = 'http://www.mypackage.org/', 
    author = 'Me', 
    author_email = '[email protected]', 
) 

내가 python setup.py sdist을 실행하면 제대로 매니페스트 파일을 생성하지만 배포판에 내 소스 파일을 포함하지 않습니다 . 분명히 소스 파일을 포함하는 디렉토리 (예 : mypackage1)를 만든 다음 각 소스 파일을 mypackage1/../mypackage에 복사하여 을 배포판 외부 외부로 복사합니다.

디렉토리 구조가 distutils이 예상하는대로 강제로 적용하지 않고이를 어떻게 해결할 수 있습니까?

답변

0

아주 좋은 해결 방법이지만, 필자는 rsynced ./mypackage ./build/mypackage에있는 Makefile을 사용하고, ./build/ 내부의 일반적인 distutils 구문을 사용합니다. 사실 distutils는 setup.py를 sdist의 루트에 압축을 풀고 거기에 코드가있을 것으로 예상하므로 다른 방법을 강요하는 악의적 인 시간을 갖게 될 것입니다.

당신이 당신의 vcs를 엉망으로 만들 필요가 없도록 깨끗하게 할 때마다 복사본을 언제든지 만들 수 있습니다.

4

배포 아카이브 파일 내부에서 원하는 디렉토리 구조는 무엇입니까? 기존 구조와 동일합니까?

당신이 수정 setup.py와 (귀하의 예제에서 code) 하나의 디렉토리 높은 모든 패키지 수 :

from distutils.core import setup 

setup(
    name = 'MyPackage', 
    description = 'This is my package', 
    packages = ['mypackage', 'mypackage.subpackage'], 
    version = '1', 
    url = 'http://www.mypackage.org/', 
    author = 'Me', 
    author_email = '[email protected]', 
    script_name = './build/setup.py', 
    data_files = ['./build/setup.py'] 
) 

당신은합니다 (code 디렉토리에)이 실행 것 :

python build/setup.py sdist 

을 또는 dist을 빌드 내부에 보관하려는 경우 :

python build/setup.py sdist --dist-dir build/dist 

나는 당신이 시도하고있는 디렉토리 구조를 좋아합니다. 나는 결코 setup.py이 루트 코드 폴더에있는 것을 보증 할만큼 충분히 특별하다고 생각한 적이 없다. 그러나 좋든 싫든, 나는 이것이 배포판 사용자들이 기대하는 곳이라고 생각한다. 따라서 distutils를 속여 다른 일을해야한다는 것은 놀라운 일이 아닙니다. data_files 매개 변수는 setup.py를 사용자가 위치한 동일한 위치에서 배포판으로 가져 오기위한 해킹입니다.

+5

배포 파일의 구조가 사용자가 easy_install을 사용하여 설치하려고 할 때 올바른 일을하는 한별로 신경 쓰지 않습니다. 그러나 파이썬 문서는 이러한 세부 사항에 관해서는 절대적으로 끔찍합니다. 구조가 어떻게 생겨야하는지 전혀 모르겠습니다. 그리고 나는 배포판을 설치하기 전에 배포판에서 스크립트를 실행한다는 아이디어에 아직도 머리를 짓고있다. –

0

먼저 상위 디렉토리로 변경 했습니까?

import os 
os.chdir(os.pardir) 

from distutils.core import setup 

아니면 (이 과잉이다,하지만 ...) 어디에서 실행 될 수있는 경우 :

import os.path 
my_path = os.path.abspath(__file__) 
os.chdir(os.normpath(os.path.join(my_path, os.pardir))) 

등을하지 않음이 작동하지만해야 확인 시도하기 쉽다.

1

설정을 실행하십시오.프로젝트 귀하의 경우에는

, 코드의 장소 setup.py/

코드의 루트 폴더에서 평 /해야는 다음과 같습니다

  • LICENSE.TXT을
  • README.txt 파일
  • INSTALL.TXT
  • TODO.txt
  • CHANGELOG.txt

당신이 "setup.py sdist를 '실행은해야 자동 세대를 포함한 MANIFEST : - setup.py - - README.txt 파일

으로 py_modules 및/또는 패키지 에 지정된 파일 더 많은 파일을 추가하면 매니페스트 파일을 손으로 편집하면 프로젝트에 필요한 다른 파일을 포함 할 수 있습니다.

다소 다소 품위있는 설명이 있으시면 read this을 참조하십시오.

실용 예제 체크 아웃 my project을 확인하십시오.

참고 : MANIFEST를 버전 제어하에 두지 않으므로 찾을 수 없습니다.

0

또한 절름발이 해결 방법이지만 빌드 프로젝트 내의 패키지 디렉토리의 junction/link가 작동해야합니다.

관련 문제