2012-01-17 62 views
9

我有一个项目,我想从中生成两个独立的python包。我想用pip安装这些软件包。使用多个setup.py脚本的多个项目?

在回答这个前面的问题,一般的建议是写两个setup.py脚本:Multiple projects from one setup.py?

所以,我想是这样的结构:

/myproject 
    setup_foo.py 
    setup_bar.py 
    /mypackage1 
    /mypackage2 
    ... 

setup_foo.py我设置script_name参数:

from distutils.core import setup 
setup(name = 'foo', 
     version = '2.0.0', 
     ..., 
     script_name = 'setup_foo.py') 

(我也尝试了下面没有参数 - 根据th出入口文件默认为sys.argv中[0])

我使用

python setup_foo.py sdist 

创建foo-2.0.0.tar.gz但是,当我pip install foo-2.0.0.tar.gz,我得到这样一个错误:

Unpacking .../foo-2.0.0.tar.gz 
Running setup.py egg_info for package from file:///...foo-2.0.0.tar.gz 
Traceback (most recent call last): 
    File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: '/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 
Complete output from command python setup.py egg_info: 
Traceback (most recent call last): 
File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: 
'/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 

我错过了一些指导pip使用setup_foo.py的方法?还是应该将两个名为'setup.py'的脚本放在不同的目录中?

回答

6

问题是为什么你把这些项目放到一个目录中。我的建议是将它们分开,然后通过“setup.py develop -U”将它们添加到共享的virtualenv中。在那里,做到了,做得很好。

否则,你的下一个问题将是共享一个“setup.cfg”,“MANIFEST.in”等。一般来说,你会有很多不必要的痛苦,每次你打破setuptools/distribute的假设。

您选择上述结构,使这两个包在Python路径自动的,在“发展-U”使其明确,并注明“进口这种”:

明确优于隐式的。

+0

感谢您的回答!你选择我所说的结构的理由几乎是正确的;我有两个人。首先,我使用PyDev/Eclipse,并希望尽可能避免项目间依赖关系。其次,我的两个发行版共享项目中几乎所有的包 - 它们主要区别于包含哪些命令行工具 - 因此将它们分成两个或三个单独的项目似乎有点过分。如果一个项目中的两个发行版以错误的方式磨损setuptools,我可能会选择只有一个发行版,并接受在所有服务器上部署所有脚本。 – 2012-01-17 21:08:49

+1

请参阅http://code.google.com/p/pyroscope/source/browse/trunk/update-to-head.sh获取一些灵感。如果您安装到virtualenv(即使是在生产机器上也是一个好主意),您可以选择性地对工具存根进行符号链接,从而发布选定的子集(请参阅“ln -nfs $(grep -l'entry_point。* pyrocore =='$ PWD/bin/*)$ {BIN_DIR: - 〜/ bin} /“命令)。 – pyroscope 2012-01-18 22:13:58

+0

聪明!是的,这是一个更简单的方法来隐藏/发布sripts子集。 – 2012-01-20 15:59:16

0

看起来像setuptools不支持没有命名setup.py的安装脚本,与distutils相反。我认为最好将bug报告给setuptools(bugs.python.org/setuptools)并分发(在bitbucket上)开发者。

+1

它可能是一个功能,而不是一个bug ......问题是“script_name”应该具有什么效果。文件不是特别清楚。 – 2012-01-20 16:01:00

+0

distutils文档仅包含以下内容:http://docs.python.org/distutils/apiref#distutils.core.run_setup – 2012-01-30 16:44:32