如何在非 python travis 配置中使用 python 3 作为构建脚本?
How to use python 3 as a build script in non-python travis configuration?
我正在尝试在使用基于 python3 的自定义构建脚本的 C 库上使用 Travis CI。
构建存储库时,它在 ./configure
上失败,因为配置使用 Python 3,默认情况下未安装。
如果我正在构建一个 Python 项目,我会在我的 .travis.yml
:
中使用它
python:
- "3.4"
然而,这似乎并不影响我的存储库,因为它是在 C 中。(我尝试了 运行 which python3
和 python --version
,报告说 python 3 不存在,取而代之的是 python 2.7。)
我试过的构建脚本:
language: c
python:
- "3.4"
当我的项目不是 Python 项目时,如何在 Travis CI 中使用 Python 3?
您应该能够通过添加 .travis.yml
:
的 before_install:
部分来安装所需的 python3 软件包
before_install:
- sudo apt-get update
- sudo apt-get install python3
如果您想使用基于容器的基础设施,您可以使用 apt addon:
addons:
apt:
sources:
- deadsnakes # source required so it finds the package definition below
packages:
- python3.5
可以使用的包有listed here
更新
为了使用像 psycopg2 或 pyYAML 这样的 c 扩展的依赖,还需要添加 python3.4-dev
mfussenegger 的回答是现在推荐的安装方式,但是 deadsnakes
软件包似乎不提供 python3
的链接,只提供 python3.*
的链接。如果您需要最新的 python 3 版本,则可以使用它。当前的 travis 建立在 Ubuntu LTS 12.04 之上,后者随 python 3.2 一起提供,足以满足大多数脚本目的。
python 3.*
是使用 shebang 启动脚本时的一个问题,我们不能在其中包含任意名称检查。这就是为什么您可能仍然需要 python3
包,如 Eric Appelts 的回答:
addons:
apt:
packages:
- python3
Travis 使用 pyenv 来管理其 Python,并且在撰写本文时默认安装了 Python 2.7.16 和 3.6.3。可以用pyenv global 3.6
来使用Python 3.6.3;你不需要root。
这是获得 Python 3 的最简单和最快的方法,在不需要特定 Python 3 版本(例如构建脚本等)的情况下非常有用.如果您想要特定的 Python 版本 and/or 构建矩阵,那么按照其他一些答案中提到的那样将其安装为软件包或插件可能会更快更容易。
这就是我的工作方式(bionic
):
dist: bionic
addons:
apt:
sources:
- deadsnakes
packages:
- python3.7
before_install:
- sudo apt-get update
- sudo apt purge python2.7-minimal
- sudo apt-get install python3 python3-pip python3-setuptools
- pip3 install --upgrade pip
自己看:.travis.yml.
不幸的是,我的 C++ CMake 项目在从 deadsnakes 安装 python3.7 和 python3.7-dev 时无法正确找到 python 库进行链接。
有效的方法是使用 pyenv,但是在 Travis 提供的 Ubuntu Xenial dist 上,pyenv 的发布版本太旧并且没有 Python 3.7 可用。我要做的是先更新 pyenv:
install:
- PYENV_VERSION=1.2.20
- PYTHON_VERSION=3.7.8
- pushd $(pyenv root)
- git fetch
- git checkout v$PYENV_VERSION
- pyenv install -v $PYTHON_VERSION
- popd
before_script:
- pyenv global $PYTHON_VERSION
- PYTHON_PREFIX=$(python-config --prefix)
- PYTHON_XY=python${PYTHON_VERSION%.*} # X.Y.Z -> pythonX.Y
- CMAKE_EXTRA_ARGS+=" -DPYTHON_EXECUTABLE=$PYTHON_PREFIX/bin/$PYTHON_XY"
- CMAKE_EXTRA_ARGS+=" -DPYTHON_LIBRARY=$PYTHON_PREFIX/lib/lib${PYTHON_XY}m.so"
- CMAKE_EXTRA_ARGS+=" -DPYTHON_INCLUDE_DIR=$PYTHON_PREFIX/include/${PYTHON_XY}m"
script:
- cmake .. -DCMAKE_BUILD_TYPE=Release ${CMAKE_EXTRA_ARGS}
- make
概览
- 一种更简洁、更模块化的方法是使用
.python-version
配置文件 [1] 而不是必须通过 pyenv global 3.6
在 Travis 配置文件中直接指定 Python 版本命令。
- 例如我在我的 Node.js 项目中成功安装并使用了
yamllint
和 Python 3.6.9。
解决方案详细信息
- 在项目的根目录中,创建一个
.python-version
并指定 python 3.6
别名作为其内容。
- 使用 bionic 发行版时,Travis 会将
3.6
解析为默认的 3.6 Python 安装
- 例如
3.6.9
[2]
- 可选地,在您的 Travis 配置文件中执行以下操作:
- (a) 指示 Travis 通过
cache
语法 在构建之间缓存任何 Python 包
- (b)升级pip默认版本Python 3.6.9.
- (c) 安装 yamllint 作为全局包
- 注意:
language
不是python
时必须全局安装 [3].
.python-版本
3.6
.travis.yml
dist: bionic
language: node_js
cache:
pip: true
before_install:
# Upgrade pip
- python -m pip install --quiet --upgrade pip
# Install yamllint
- pip install --quiet --user yamllint
资源
我正在尝试在使用基于 python3 的自定义构建脚本的 C 库上使用 Travis CI。
构建存储库时,它在 ./configure
上失败,因为配置使用 Python 3,默认情况下未安装。
如果我正在构建一个 Python 项目,我会在我的 .travis.yml
:
python:
- "3.4"
然而,这似乎并不影响我的存储库,因为它是在 C 中。(我尝试了 运行 which python3
和 python --version
,报告说 python 3 不存在,取而代之的是 python 2.7。)
我试过的构建脚本:
language: c
python:
- "3.4"
当我的项目不是 Python 项目时,如何在 Travis CI 中使用 Python 3?
您应该能够通过添加 .travis.yml
:
before_install:
部分来安装所需的 python3 软件包
before_install:
- sudo apt-get update
- sudo apt-get install python3
如果您想使用基于容器的基础设施,您可以使用 apt addon:
addons:
apt:
sources:
- deadsnakes # source required so it finds the package definition below
packages:
- python3.5
可以使用的包有listed here
更新
为了使用像 psycopg2 或 pyYAML 这样的 c 扩展的依赖,还需要添加 python3.4-dev
mfussenegger 的回答是现在推荐的安装方式,但是 deadsnakes
软件包似乎不提供 python3
的链接,只提供 python3.*
的链接。如果您需要最新的 python 3 版本,则可以使用它。当前的 travis 建立在 Ubuntu LTS 12.04 之上,后者随 python 3.2 一起提供,足以满足大多数脚本目的。
python 3.*
是使用 shebang 启动脚本时的一个问题,我们不能在其中包含任意名称检查。这就是为什么您可能仍然需要 python3
包,如 Eric Appelts 的回答:
addons:
apt:
packages:
- python3
Travis 使用 pyenv 来管理其 Python,并且在撰写本文时默认安装了 Python 2.7.16 和 3.6.3。可以用pyenv global 3.6
来使用Python 3.6.3;你不需要root。
这是获得 Python 3 的最简单和最快的方法,在不需要特定 Python 3 版本(例如构建脚本等)的情况下非常有用.如果您想要特定的 Python 版本 and/or 构建矩阵,那么按照其他一些答案中提到的那样将其安装为软件包或插件可能会更快更容易。
这就是我的工作方式(bionic
):
dist: bionic
addons:
apt:
sources:
- deadsnakes
packages:
- python3.7
before_install:
- sudo apt-get update
- sudo apt purge python2.7-minimal
- sudo apt-get install python3 python3-pip python3-setuptools
- pip3 install --upgrade pip
自己看:.travis.yml.
不幸的是,我的 C++ CMake 项目在从 deadsnakes 安装 python3.7 和 python3.7-dev 时无法正确找到 python 库进行链接。
有效的方法是使用 pyenv,但是在 Travis 提供的 Ubuntu Xenial dist 上,pyenv 的发布版本太旧并且没有 Python 3.7 可用。我要做的是先更新 pyenv:
install:
- PYENV_VERSION=1.2.20
- PYTHON_VERSION=3.7.8
- pushd $(pyenv root)
- git fetch
- git checkout v$PYENV_VERSION
- pyenv install -v $PYTHON_VERSION
- popd
before_script:
- pyenv global $PYTHON_VERSION
- PYTHON_PREFIX=$(python-config --prefix)
- PYTHON_XY=python${PYTHON_VERSION%.*} # X.Y.Z -> pythonX.Y
- CMAKE_EXTRA_ARGS+=" -DPYTHON_EXECUTABLE=$PYTHON_PREFIX/bin/$PYTHON_XY"
- CMAKE_EXTRA_ARGS+=" -DPYTHON_LIBRARY=$PYTHON_PREFIX/lib/lib${PYTHON_XY}m.so"
- CMAKE_EXTRA_ARGS+=" -DPYTHON_INCLUDE_DIR=$PYTHON_PREFIX/include/${PYTHON_XY}m"
script:
- cmake .. -DCMAKE_BUILD_TYPE=Release ${CMAKE_EXTRA_ARGS}
- make
概览
- 一种更简洁、更模块化的方法是使用
.python-version
配置文件 [1] 而不是必须通过pyenv global 3.6
在 Travis 配置文件中直接指定 Python 版本命令。 - 例如我在我的 Node.js 项目中成功安装并使用了
yamllint
和 Python 3.6.9。
解决方案详细信息
- 在项目的根目录中,创建一个
.python-version
并指定 python3.6
别名作为其内容。- 使用 bionic 发行版时,Travis 会将
3.6
解析为默认的 3.6 Python 安装 - 例如
3.6.9
[2]
- 使用 bionic 发行版时,Travis 会将
- 可选地,在您的 Travis 配置文件中执行以下操作:
- (a) 指示 Travis 通过
cache
语法 在构建之间缓存任何 Python 包
- (b)升级pip默认版本Python 3.6.9.
- (c) 安装 yamllint 作为全局包
- 注意:
language
不是python
时必须全局安装 [3].
- 注意:
- (a) 指示 Travis 通过
.python-版本
3.6
.travis.yml
dist: bionic
language: node_js
cache:
pip: true
before_install:
# Upgrade pip
- python -m pip install --quiet --upgrade pip
# Install yamllint
- pip install --quiet --user yamllint