繁体   English   中英

使用 Tox 复制 setup.py 依赖项

[英]Copying setup.py Dependencies with Tox

setup.py通常依赖于几个外部文件,最显着的是README.md用于long_description ,可能是VERSION用于version 例如

root = os.path.dirname(os.path.abspath(__file__))
setuptools.setup(
    name             = 'package',
    version          = open(os.path.join(root, 'VERSION')).read().strip(),
    description      = 'A Simple Package',
    long_description = open(os.path.join(root, 'README.md')).read().strip(),
    # ...
)

但是,当尝试在这样的包上使用tox运行测试时,我收到以下错误:

ERROR: invocation failed (exit code 1), logfile: 
.tox/py36/log/py36-6.log
ERROR: actionid: py36
msg: installpkg
cmdargs: 
['.tox/py36/bin/pip', 'install', '-U', '--no-deps', '.tox/dist/package-0.1.0.zip']

Processing ./.tox/dist/package-0.1.0.zip
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "setup.py", line 10, in <module>
        version          = open(os.path.join(root, 'VERSION')).read().strip(),
    FileNotFoundError: [Errno 2] No such file or directory: 'VERSION'

(或带有README.md的类似消息)。 显然, tox只复制setup.py ,并且当它尝试运行它时,它的依赖项丢失并且不起作用。

我查看了文档,但似乎找不到告诉tox复制这些文件的方法。 有没有办法做到这一点?

编辑

这是我的目录结构和相关文件:

$ ls
package/   tests/   README.md    VERSION   setup.py    tox.ini

$ cat tox.ini
[tox]
envlist = py36
[testenv]
deps     = pytest
commands = pytest tests

$ cat setup.py
import os
import setuptools
root = os.path.dirname(os.path.abspath(__file__))
setuptools.setup(
    name             = 'package',
    version          = open(os.path.join(root, 'VERSION')).read().strip(),
    description      = 'A Simple Package',
    long_description = open(os.path.join(root, 'README.md')).read().strip(),
    packages         = setuptools.find_packages(),
)

(如果我使用相对路径, open('README.md')发生同样的情况,例如open('README.md') 。)

原来,这不是一个tox问题,而是一个setuptools一个(或者更确切地说,我无法正常使用的话)。 我在这里发布答案,以防万一其他人将来遇到类似的问题。

tox创建源分发(即python setup.py sdist ),然后将其安装在虚拟环境中,然后在其中运行测试。 正是这个发行VERSION缺少VERSIONREADME.md文件,因为setuptools不包含任何非标准文件。 以机智:

# create a source distribution
$ python setup.py sdist

# extract it
$ cd dist/
$ tar xfz package-0.1.0.tar.gz

# check it out
$ ls package-0.1.0
package    package.egg-info   PKG-INFO   setup.cfg   setup.py

# no VERSION or README.md :(

要包含非标准文件,请添加一个MANIFEST.in文件,如下所示:

include VERSION
include README.md

这告诉setuptools将这些文件包含在发行版中,并使tox按预期工作。

您使用的是哪个版本的setuptools

我有一个类似的问题,升级setuptools修复了它。

版本 36.4.0 开始,似乎包括README.md是自动完成的。 但是, VERSION文件必须包含在MANIFEST.in文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM