【问题标题】:Multiple projects using multiple setup.py scripts?使用多个 setup.py 脚本的多个项目?
【发布时间】:2012-02-12 11:26:43
【问题描述】:

我有一个项目,我想从中生成两个单独的 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”的脚本放在不同的目录中?

【问题讨论】:

    标签: python macos python-2.7 pip distutils


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    问题是为什么要将这些项目放在一个目录中。我的建议是正确分离它们,然后通过“setup.py develop -U”将它们添加到共享的虚拟环境中。去过那里,做过,效果很好。

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

    假设您选择了上述结构,因此两个包都自动位于 python 路径中,“develop -U”使其明确,并引用“import this”:

    显式优于隐式。

    【讨论】:

    • 感谢您的回答!关于我选择我说明的结构的原因,您几乎是正确的;我有两个。首先,我正在使用 PyDev/Eclipse,并希望尽可能避免项目间的依赖关系。其次,我的两个发行版共享项目中几乎所有的包——它们的主要区别在于包含的命令行工具——因此将它们分成两个或三个独立的项目似乎有点过分。如果一个项目中的两个发行版以错误的方式摩擦 setuptools,我可能会选择只有一个发行版并接受在所有服务器上部署所有脚本。
    • 请参阅code.google.com/p/pyroscope/source/browse/trunk/… 以获得一些灵感。如果您安装到 virtualenv(总是一个好主意,即使在生产机器上),您可以选择性地符号链接工具存根,从而发布选定的子集(请参阅“ln -nfs $(grep -l 'entry_point.*pyrocore ==' $PWD/bin/*) ${BIN_DIR:-~/bin}/" 命令)。
    • 聪明!是的,这是一种更简单的隐藏/发布 sripts 子集的方法。
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多