파이썬 setuptools 분산 패키지에 네임 스페이스 접두어를 추가하려고합니다. 예 : 우리는 common_utils라고 불리는 패키지를 가지고 있으며 패키지 트리에 더미 디렉토리/모듈 '우산'을 포함시키지 않고 umbrella.common_utils로 액세스하고자합니다.이름 공간 접두어 setuptools 패키지 배포판을 추가하는 방법이 있습니까?
이것이 가능합니까?
감사합니다,
파이썬 setuptools 분산 패키지에 네임 스페이스 접두어를 추가하려고합니다. 예 : 우리는 common_utils라고 불리는 패키지를 가지고 있으며 패키지 트리에 더미 디렉토리/모듈 '우산'을 포함시키지 않고 umbrella.common_utils로 액세스하고자합니다.이름 공간 접두어 setuptools 패키지 배포판을 추가하는 방법이 있습니까?
이것이 가능합니까?
감사합니다,
당신은 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'>
위대한 , 나는 "python setup.py build"로 작업하는 것을 볼 수 있습니다. 그러나 "python setup.py"을 만들면 "umbrella.common_utils"를 가져올 수 없습니다. 여기서 무슨 일이 일어나고 있습니까? – JimmyK
그래,'개발'대상에는 몇 가지 제한이 있습니다 - 소스 패키지가 의도 한 설치 구조와 일치해야합니다. 이 문제를 해결하기 위해 구축 할 수있는 빠른 스크립트를 추가했습니다. 희망이 도움이됩니다. – samplebias
모두 고려해 보면 소스 프로젝트에 '우산'레벨을 추가하는 것이 더 간단 할 것입니다. – samplebias