You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tox -r运行机制及非Python文件未拷贝问题修复方案

tox -r 工作原理与问题根因

tox -r 中 -r 是 --recreate 的短参数,作用是强制清空已存在的目标虚拟环境目录,从零开始完成环境创建、全量依赖安装、测试命令执行的全流程,不会复用任何之前环境的缓存内容。

你遇到的非.py文件丢失问题,和tox本身没有直接关系:tox安装git格式的私有依赖时,本质是调用pip拉取对应分支代码,再执行依赖包内的setup.py完成打包安装流程。setuptools默认打包规则只会自动识别纳入所有.py后缀的源码文件,所有非代码类的资源文件(你这里的credentials.json、token.json都属于这类)如果没有在打包配置中显式声明,就不会被打包到最终的安装产物中,自然不会出现在虚拟环境的site-packages目录下。

你之前尝试的三个方案全部因为配置错误没有生效:

  • data_files配置的作用是将文件安装到系统级的固定路径,而非Python包的内部目录,且你填写的相对路径和打包时的工作目录不匹配,才会触发文件不存在的报错。
  • 你写的MANIFEST.in规则存在多余单引号的语法错误,且该配置仅控制源码分发包(sdist)内的文件列表,不会影响pip安装时写入site-packages的内容,单独配置无法解决问题。
  • 第三个setup.py配置的包路径完全错误:你的代码包层级是qa_tools.api,并非根目录下的api包,packages参数手动填写['api']根本无法扫描到正确的包结构,package_data内的路径也存在重复前缀,配置自然不会生效。
修复步骤

所有修改都需要在私有依赖qa-api的git仓库中操作,修改完成后推送到master分支即可:

  1. 替换qa-api根目录下的setup.py为正确配置,使用自动包扫描避免路径写错,显式声明需要包含的资源文件:
import setuptools
from setuptools import find_packages

setuptools.setup(
    name='qa-api',
    version='0.0.0',
    # 自动扫描所有带__init__.py的Python包,会自动识别qa_tools、qa_tools.api两层结构
    packages=find_packages(),
    # 声明qa_tools.api包下需要包含的非py文件
    package_data={
        'qa_tools.api': ['*.json'],
    },
    include_package_data=True,
    # 原有setup.py中的其他配置(比如依赖声明等)全部保留
)
  1. (可选,兼容所有安装场景)在qa-api根目录新建/修改MANIFEST.in,写入无语法错误的资源包含规则:
recursive-include qa_tools/api *.json
  1. 提交上述修改并推送到qa-api的master分支。
  2. 回到你本地的tox项目目录,重新执行tox -r重建环境,此时两个json文件就会被正确复制到project/venv/Lib/site-packages/qa_tools/api目录下。
配置优化建议

你当前的tox.ini存在两个容易出问题的配置,可以顺手调整:

  • envdir = venv 把tox的环境目录固定到项目下的venv,容易和你手动创建的虚拟环境冲突,建议删除该行,使用tox默认的.tox目录管理环境即可。
  • PYTHONPATH中硬编码了Windows格式的venv/Lib/site-packages路径,在Linux/macOS环境下对应路径为venv/lib/python<版本号>/site-packages,会出现依赖找不到的问题;实际上pip安装到虚拟环境的包本身就在Python的默认搜索路径中,不需要手动把site-packages加到PYTHONPATH里,直接删掉这段硬编码即可。

内容的提问来源于stack exchange,提问作者Galoperidol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:09:33