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

13 投票
2 回答
7567 浏览
提问于 2025-04-17 10:27

我有一个项目,想从中生成两个独立的Python包。我希望通过pip来安装这些包。

在之前的问题回答中,大家普遍建议写两个 setup.py 脚本:从一个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 个回答

1

看起来,setuptools不支持那些不是叫做setup.py的设置脚本,这和distutils不一样。我觉得最好是把这个问题反馈给setuptools的开发者(可以去bugs.python.org/setuptools)和分发(在bitbucket上)开发者。

7

这个问题是问你为什么把这些项目放在一个文件夹里。我建议你把它们分开放,然后通过“setup.py develop -U”把它们添加到一个共享的虚拟环境里。我之前也这样做过,效果非常好。

否则,你接下来会遇到共享“setup.cfg”、“MANIFEST.in”等文件的问题。一般来说,每次打破setuptools或distribute的假设时,你都会遇到很多不必要的麻烦。

我猜你选择这种结构是为了让这两个包自动在python路径中可用,而“develop -U”则让这个过程变得明确。引用一句话:“显式比隐式好。”

撰写回答