2013-01-19 3 views
7

의이 프로젝트는 proj라고하고 다음과 같은 구조를 가지고이 프로젝트에 가정 해 봅시다 : 프로젝트에의setup.py : 이름 바꾸기 SRC 패키지 이름을 투사하는

proj/ 
    dists/ 
    doc/ 
    src/ 
    __init__.py 
    xyz.py 
    abc.py 
    test/ 
    setup.py 

모든 내용을 볼 수 있듯이 src 하위 폴더 src 폴더에서 distutils 배포 패키지를 만들려면 어떻게해야합니까?

내 순진한 생각, the tutorial 다음,이 같은 setup.py를 작성 했 :

#omitting basics 
setup(
    name='proj', 
    packages=['src'], 
    package_dir={'proj':'src'} 
) 

하지만 내 시스템에 결과 패키지를 설치 한 후, 나는 아직도 src.xyz하지 proj.xyz을 수입해야하는 목표와 예상 결과 였을 것입니다.

답변

-3

당신이 setup 함수를 호출하기 전에 당신은 PYTHONPATHsrc 폴더를 추가하는 시도 할 수 있습니다 :

os.chdir(src_path) 
: 단지 안전을 위해, 또한

import sys, os 
src_path = os.path.join(os.path.realpath(os.path.dirname(__file__)), 'src') 
sys.path.append(src_path) 

그리고를, 당신은 다음 작업 디렉토리를 변경

그 후에는 모두 정상입니다.

앱을 패키징하기위한 다른 도구는 내부에서 지원됩니다. 나는 그것이 setuptools라고 생각했고, PyInstaller라고 밝혀졌습니다. 그러나 기본적으로 패키지를 직접 가져올 수있을만큼 충분합니다.

밝혀 지 distutils는 package_dir 지시어를 가지고 있습니다. 그게 당신이 사용해야하지만, 수도PYTHONPATH에 패키지를 추가하여 작동 할 수 있습니다.

proj/ 
    src/ 
    proj/ 
     __init__.py 
     xyz.py 
     abc.py 
    setup.py 

하고 setup.py 변경 :

# ... 
setup(
    name='proj', 
    packages=['proj'], 
    package_dir={'':'src'} 
) 

그것은의 distutils에 의해 필요하지 않지만 다른 도구는 상위 디렉토리 예상

+1

나는 아직 문제가있어 확실하지 않다. 다른 사람들이 스스로 쉽게 설치할 수있는 Python 패키지를 작성하려고합니다. 다른 폴더에 쓴 내용을 가져 오는 것이 아닙니다. – erikbwork

+0

네, 이해 합니다만,'setup.py'는 작동시키기 위해서 다른 폴더에있는 것들을 가져와야합니다. 이 패키지들이 PYTHONPATH에 있으면, 그것이 어디에 있든 상관 없습니다. 그것이 당신을 위해 작동하지 않으면, 당신은 다른 길을 봐야 할 것입니다, 미안 해요. – jadkik94

+0

죄송합니다.하지만 문제는 아닙니다. – erikbwork

4

당신은 proj/ 디렉토리에 파이썬 패키지 파일을 넣어 그것을 고칠 수 __init__.py 파일의 이름은이 경우 Python 패키지 이름과 동일해야합니다 (예 : proj).

+0

나는 그것을했고 그것이 효과가있다. 그래도 내가 당신의 마지막 코멘트를 이해하는지 모르겠다. 예상대로 작동하도록'proj/src/proj'와 같은 폴더 구조를 갖길 기대하는 도구가 있다는 것을 의미합니까? 너무 비효율적 인 것 같습니다. 아니면 여기서 비효율적 인 일을하고 있습니까? – erikbwork

+0

디렉토리 이름 : /__ init __. py'는 Python 패키지 이름과 같아야합니다. 즉,'__init __. py'가 표시되면 상위 디렉토리 이름을 보면 Python 패키지인지 알 수 있습니다. – jfs

2

이 여기에보고 setuptools에의 버그로 인해 : https://github.com/pypa/setuptools/issues/250

기본적으로,이 작업을 수행하지만 개발자 모드입니다.이제 3 개 솔루션을 가지고에 :

  • 심볼릭 링크 projsrc 패키지 (및 comitting 때 무시), 그것은 것입니다 상자 밖으로 작동하지만 src에서 proj
  • 더러운
  • 변화 만들 src의 하위 디렉토리 proj 다음 옵션을 사용하여 :
 
packages=['proj'], 
package_dir={'proj': 'src/proj'}, 
+0

setuptools 문제에 대한 링크 : https://github.com/pypa/setuptools/issues/250 –

+0

문제는 3.5 시간 이상 마감되었습니다. – Daniel

관련 문제