2011-05-16 76 views

回答

2

可以使用package_dir選項告訴setuptools的分裝的全包的名稱和位置:

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 /分發兼容的解決方法。

這聽起來像你有效地希望這樣的事情,你可以在項目中包含的根,根據需要自定義:

在項目中創建的根命名爲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 develop」時,我無法「導入umbrella.common_utils」,這裏發生了什麼? – JimmyK 2011-05-16 15:05:44

+0

是的,'develop'目標有一些限制 - 它要求你的源代碼包匹配預期的安裝結構。我添加了一個快速腳本,您可以利用它來解決此問題。希望能幫助到你。 – samplebias 2011-05-16 15:38:53

+0

所有考慮,只需在源項目中添加「傘」級別會更簡單。 – samplebias 2011-05-16 16:16:04

相關問題