使用多个setup.py脚本的多个项目?

时间:2012-01-17 16:42:12

标签: python macos python-2.7 pip distutils

我有一个项目,我想从中生成两个单独的python包。我想用pip安装这些软件包。

在回答上一个问题时,一般建议是编写两个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')

(我在没有参数的情况下尝试过以下内容 - 根据文档默认为sys.argv [0])

我使用

创建foo-2.0.0.tar.gz
python setup_foo.py sdist

但是当我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”的脚本放在不同的目录中吗?

2 个答案:

答案 0 :(得分:7)

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

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

假设你选择了上面的结构,所以这两个包都是自动地在python路径中,“develop -U”使它显式化,并引用“import this”:

  

明确比隐含更好。

答案 1 :(得分:0)

看起来setuptools不支持未命名为setup.py的设置脚本,这与distutils相反。我认为最好将错误报告给setuptools(bugs.python.org/setuptools)并分发(在bitbucket上)开发人员。