setup.py test' 的 egg 安装位置?

7 投票
1 回答
2205 浏览
提问于 2025-04-15 16:40

我在一个文件夹里预先下载了我项目需要的所有包,现在我希望setuptools只从这个文件夹里安装这些包。

在我的setup.cfg文件里,我写了:

[easy_install]
allow_hosts = None
find_links = ../../setup

我运行python setup.py develop,它能正确找到并安装所有的包。

为了测试,我在setup.py里还有一个额外的需求。

tests_require=["pinocchio==0.2"],

这个包也在本地的../../setup文件夹里。

我运行python setup.py test,它能看到这个依赖,并且能在../../setup里找到这个包。但是,这个包却被安装到了我当前的目录,而不是和其他包一起放在site-packages目录里。

我试着在setup.cfg和命令行中都指定了install-dir,但在tests命令下都没有效果。

我可以把这个依赖加到install_requires部分,但我希望能把安装和测试所需的内容分开,如果可以的话。

我该如何把这个依赖保留在tests_require部分,同时又让它安装到site-packages目录呢?

1 个回答

3

从源代码(setuptools/command/tests.py)来看,setup.py test 这个命令本身并不是为了安装东西而设计的(因为它是用来测试的,为什么要把东西放进 site-packages 里呢?)。它使用 fetch_build_egg(setuptools/dist.py)来获取包,这实际上是进行本地的 easy_install。我怀疑你不能轻易地让 test 按照你的想法去做。

一些备注和想法: 我对 setuptools 的经验是,它里面有一些bug和未记录的行为。(我发现的一个特别麻烦的问题是,它不会进入软链接的目录,而 distutils 是可以的)。

我建议你要么 A) 不要这样做。:),要么 B) 手动通过调用 easy_install package 来安装文件,或者 C) 研究一下 setuptools 系统,可能可以添加你自己的命令。理解这些并不太难,掌握了它会在你以后遇到 setuptools 的问题时帮助很大。

撰写回答