2014-06-06 5 views
1

distutils를 사용하여 파이썬 패키지를 패키징하고 있습니다.Distutils 패키지 이름

내 구조는 다음과 같습니다 setup.py 내 패키지에서

src 
\ __init__.py 
| util.py 
| client 
    \ __init__.py 
    | file1.py 
    | file2.py 

은 다음과 같습니다

package_dir={'pkg_name':'src'}, 
packages=['pkg_name','pkg_name.client'] 

내가 pkg_name.client를 가져올 필요가 밖으로없이 client의 콘텐츠를 사용할 수 있도록하고 싶습니다 하지만 pkg을 가져 오기 만하면됩니다.

는 것이 가능할까요? 방금 https://docs.python.org/2/distutils/setupscript.html#listing-whole-packages을 읽었습니다. 내가 본 예제는 여전히 모두 디렉토리 이름 (또는 다른 이름)을 참조합니다. 그러나 그것을 제거 할 수 있습니까? 단지 루트에 포함 시켰습니까? 나는 변종을 시도했지만 모두 실패하고 있습니다.

뭔가 파이썬에서

package_dir = {'': 'src', '': 'src/client'}처럼 초기화 여전히 참조 할 필요가있을 것이다하지만 distutil를 바라고하는 디렉토리 이름은 그 주위에 약간의 트릭이있다.

답변

0

처음 패키지를 만들 때 여러 변형을 시도해 보았습니다.

디렉토리 구조가 변경 될 수 있다고 생각하면 작성한 도구를 machete라는 공개 도구로 사용하는 것이 좋습니다. cookiecutter처럼 다른 것들도 있습니다.

https://pypi.python.org/pypi/machete/ 

는 빈 폴더에서, 당신은 단지 입력 :

/home/you $ machete -t app 

이 모든 구조가 필요 생성합니다, 당신은 단지 그것의 논리를 이해하고 코드를 작성해야합니다. 패키지에는 몇 가지 요구 사항이 있기 때문에 구조가 당신과 매우 다릅니다.

패키지를 처음 만드는 것은 실망 스럽습니다.

Aditionally는 않는 하나 개의 까다로운 일이 만도 모듈 폴더에 추가하는 것입니다 :

file: __init__.py 

# -*- coding: UTF-8 -*- 
import glob 

__all__ = [] 

py_files = glob.glob('./yourproject/modules/*.py') 
py_files.remove('./yourproject/modules/__init__.py') 
for py_file in py_files: 
    __all__.append(py_file.split('/')[3].split('.')[0]) 

모듈을 가져 오는 이런 식으로, *, 아마 당신은 당신의 디렉토리 구조와 목표를 달성 할 수있다.. 이 하나는 만 테이 생성 프로젝트에 사용됩니다.

희망 사항 중 하나가 도움이 되길 바랍니다.

마르코