2011-05-16 1 views

답변

2

당신은 setuptools에에게 서브 패키지의 전체 패키지 이름과 위치를 알 수있는 package_dir 옵션을 사용할 수 있습니다

from setuptools import setup 

setup(
    name = 'umbrella', 
    packages = [ 
     'umbrella.common_utils' 
     ], 
    package_dir = { 
     'umbrella.common_utils': './common_utils' 
     } 
    ) 

결과 :

% python setup.py build 
.. 
creating build/lib/umbrella 
creating build/lib/umbrella/common_utils 
copying ./common_utils/__init__.py -> build/lib/umbrella/common_utils 

업데이트

발견 한대로 python setup.py develop 대상은 약간의 해킹입니다. 프로젝트 폴더를 site-packages/easy-install.pth에 추가하지만 setup.py에 설명 된 구조에 패키지를 적용하지 않습니다. 불행히도 나는 이것을 위해 setuptools/distribute-compatible workaround를 발견하지 못했다. 효과적으로 프로젝트의 루트에 포함하고 사용자의 요구에 사용자 정의 할 수 같은 것을 원하는처럼

그것은 소리 :

프로젝트 루트에 develop라는 이름의 파일을 만듭니다

#!/usr/bin/env python 

import os 
from distutils import sysconfig 

root = os.path.abspath(os.path.dirname(__file__)) 
pkg = os.path.join(sysconfig.get_python_lib(), 'umbrella') 
if not os.path.exists(pkg): 
    os.makedirs(pkg) 
open(os.path.join(pkg, '__init__.py'), 'wb').write('\n') 
for name in ('common_utils',): 
    dst = os.path.join(pkg, name) 
    if not os.path.exists(dst): 
     os.symlink(os.path.join(root, name), dst) 


(virt)% chmod 755 ./develop 
(virt)% ./develop 
(virt)% python -c 'from umbrella import common_utils; print common_utils' 
<module 'umbrella.common_utils' from 
    '/home/pat/virt/lib/python2.6/site-packages/umbrella/common_utils/__init__.pyc'> 
+0

위대한 , 나는 "python setup.py build"로 작업하는 것을 볼 수 있습니다. 그러나 "python setup.py"을 만들면 "umbrella.common_utils"를 가져올 수 없습니다. 여기서 무슨 일이 일어나고 있습니까? – JimmyK

+0

그래,'개발'대상에는 몇 가지 제한이 있습니다 - 소스 패키지가 의도 한 설치 구조와 일치해야합니다. 이 문제를 해결하기 위해 구축 할 수있는 빠른 스크립트를 추가했습니다. 희망이 도움이됩니다. – samplebias

+0

모두 고려해 보면 소스 프로젝트에 '우산'레벨을 추가하는 것이 더 간단 할 것입니다. – samplebias