【发布时间】:2017-12-21 12:44:54
【问题描述】:
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'),也会发生同样的情况。)
【问题讨论】:
-
默认情况下,
tox运行在tox.ini(以及因此您的 README 和 VERSION)所在的同一目录中,因此应该没有问题。我们可以看看你的tox.ini吗?
标签: python testing setuptools tox