一、虚拟环境
pyenv: 用于python多版本管理
virtualenv: 用于python给各版本提供纯净的虚拟环境
- pyenv 安装 (可参考git官网 https://github.com/pyenv)
1) 首选通过pyenv_installer来安装。命令如下:
curl https://pyenv.run | bash
- 若安装失败,可考虑手动安装
#安装依赖
yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel
#拉取源码编译
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cd ~/.pyenv && src/configure && make -C src
#配置环境变量(~/.bashrc)
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
souce ~/.bashrc
#验证生效
pyenv --version
2. 安装pyenv-virtualenv 插件 (可参考git官网:https://github.com/pyenv/pyenv-virtualenv)
pyenv自动安装时, pyenv virtualenv 似乎已经安装好
```shell
##拉取源码
git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
## 添加到bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
- 使用
pyenv --version #查看pyenv 的版本
pyenv versions #查看已安装的python版本
pyenv install --list #查看可安装的python版本
pyenv install x.x.x #安装python版本
pyenv uninstall x.x.x # 删除python版本
pyenv virtualenv x.x.x ${env-name} #创建python虚拟环境
- pybind11 cpp cmake配置例子
#c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) spam.cpp -o spam.so #mannal
cmake_minimum_required(VERSION 3.0.0)
project(spam VERSION 0.1.0)
# set(CMAKE_CXX_STANDARD 11)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_FLAGS "-Wall")
set(CMAKE_CXX_FLAGS "-fPIC")
set(CMAKE_CXX_FLAGS "-std=c++11")
include(CTest)
enable_testing()
#python package find
set(Python3_ROOT_DIR "/home/xxx/.pyenv/versions/3.9-dev") # 设定python更目录 需要cmake版本足够高,最好 > 3.15,以下find 相同
find_package (Python3 COMPONENTS Interpreter Development REQUIRED)
find_package(pybind11 CONFIG PATHS "/home/xxx/.pyenv/versions/env39dev/lib64/python3.9/site-packages/pybind11" REQUIRE)
message(${Python3_FOUND})
message(${pybind11_FOUND})
# add_subdirectory()
include_directories(${pybind11_INCLUDE_DIRS})
# set(CMAKE_SHARED_LIBRARY_PREFIX "")
# set(CMAKE_STATIC_LIBRARY_PREFIX "")
add_library(spam SHARED spam.cpp)
set_target_properties(spam PROPERTIES SUFFIX "_add")
# set_target_properties(spam PROPERTIES RELEASE_PREFIX "") # 可执行文件后缀