kinetic(ubuntu1604)设置默认Python3版本为python3.6及python3.6下载

本文介绍了两种在Ubuntu系统中更改默认Python版本的方法。方法一是直接修改软连接,包括查看当前版本、备份原有链接、删除旧链接及创建新链接到Python3.6。方法二是使用`update-alternatives`工具进行选择,通过列出所有Python3链接并配置它们的优先级来切换版本。此外,还提供了在Ubuntu kinetic版本下安装Python3.6的参考方法。

方法一:直接更改软连接
1.查看当前默认的Python版本(打开终端,输入python3)
2. 修改默认Python3版本
下面把默认的python3版本从3.5改为3.6
进入”/usr/bin”目录下,输入”ls -l | grep python”显示所有名字中包含python的文件 ,来查看指向
3.只要把python3的指向改为python3.6即可(创建新安装的python3链接)
第一步:先备份原来的链接(在对系统执行删除之前进行备份是个好的习惯)。
在ternimal下输入命令:

sudo cp /usr/bin/python3 /usr/bin/python3_bak 

第二步:删除原来默认指向python3.5版本的链接。在ternimal下输入命令:

 sudo rm /usr/bin/python 

第三步:重新指定新的链接给python3.6版本。输入命令:

sudo ln -s /usr/bin/Python-3.6 /usr/bin/python3

参考:link.
方法二:利用update-alternatives来进行选择(可以后期简单切换)
第一步·:直接利用以下指令查看对应的python3链接有哪些:

update-alternatives --list python3

第二步:利用以下指令来更换连接对象:

update-alternatives --config python3

需要注意的是:在一二步之间,需要提前利用一下指令进行设置多个链接对象:

# update-alternatives: using /usr/bin/python3.5 to provide /usr/bin/python (python) in auto mode
update-alternatives --install /usr/bin/python python /usr/bin/python3.5 1
# update-alternatives: using /usr/bin/python3.6 to provide /usr/bin/python (python) in auto mode
update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2

后面的数字越大,优先级越高
参考:link.

注:kinetic版本下下载python3.6方法:
法一:下载源码(但是我没有走通)参考:知乎
法二:kinetic其实支持python3.6和python3.9 参考:csdn
根据参考内容配置,需要注意一点:
第一步配置软件库,他这个指令不好使

sudo add-apt-repository ppa:jonathonf/python-3.6

可替换为:

sudo add-apt-repository ppa:deadsnakes/ppa
<think>好的,我现在需要解决用户的问题:如何在仅支持Python 2.7的ROS系统中兼容运行基于Python 3.6的OpenCV。首先,我需要理清ROS和Python版本之间的关系。根据引用[1],ROS Kinetic默认使用Python 2.7,并且将相关路径添加到PYTHONPATH中,这可能导致Python 3的环境被覆盖。用户希望在这套系统里使用Python 3.6的OpenCV,所以需要解决版本冲突的问题。 接下来,我需要考虑OpenCV的安装方式。引用[3]提到在Python3.6环境中通过pip安装opencv-python,但ROS的Python2.7可能无法直接调用这个库。可能的解决方案包括创建虚拟环境、使用桥接工具或者编译OpenCV使其兼容Python2.7和3.6。不过,编译支持多版本Python的OpenCV可能比较复杂,特别是如果用户已经通过pip安装了Python3.6的OpenCV,可能需要其他方法。 引用[2]和[4]提到了在Ubuntu下通过符号链接将OpenCV的共享库链接到Python3.6的site-packages目录。这让我想到,或许可以通过调整环境变量或路径,让ROS的Python2.7找到Python3.6的OpenCV库。但问题在于不同Python版本的模块不兼容,直接导入可能会导致错误。比如,Python2.7无法直接加载为Python3.6编译的cv2.so。 另一个思路是使用进程间通信,比如ROS节点。将Python3.6的代码作为一个独立的节点运行,与ROS的Python2.7节点通过ROS消息或服务进行通信。这样,Python3.6部分处理OpenCV任务,而ROS主节点继续使用Python2.7,避免环境冲突。这种方法需要设计节点间的接口,可能增加系统复杂性,但能有效隔离环境。 另外,用户可能需要检查PYTHONPATH的设置。引用[1]指出ROS会自动添加Python2.7的路径到PYTHONPATH,这可能会覆盖Python3的环境。解决方法是在运行Python3脚本时临时修改PYTHONPATH,或者在脚本中动态调整sys.path,确保Python3.6的路径优先。例如,在Python3脚本开头添加: ```python import sys sys.path.insert(0, &#39;/path/to/python3.6/site-packages&#39;) ``` 但这种方法是否可行还需测试,因为不同Python版本的模块可能存在二进制不兼容。 还可以考虑使用虚拟环境,如virtualenv或conda,为Python3.6创建一个独立的环境,并在其中安装OpenCV。然后,在运行Python3脚本时激活该环境,确保使用正确的库路径。不过,ROS节点启动时可能会默认使用系统Python环境,因此需要确保启动命令正确指向虚拟环境的Python解释器。 最后,可能需要编译支持Python2.7和3.6的OpenCV版本。这需要在编译时配置两个Python版本的支持,但这可能复杂且耗时,特别是如果用户不熟悉CMake编译选项的话。但引用[2]提到通过符号链接解决路径问题,或许可以尝试将Python3.6的cv2.so链接到Python2.7的site-packages目录,但这可能不兼容,因为模块是针对特定Python版本编译的。 总结可能的解决方案: 1. 使用ROS多节点架构,隔离Python版本。 2. 调整PYTHONPATH,优先加载Python3.6的OpenCV。 3. 使用虚拟环境隔离Python3.6环境。 4. 重新编译OpenCV支持双Python版本。 5. 符号链接结合环境变量调整,但需注意兼容性。 需要评估每种方法的可行性和复杂度。对于大多数用户来说,节点隔离和虚拟环境可能是较为可行的方案,而编译OpenCV可能更适合高级用户。同时,需要注意不同方法可能引发的其他问题,比如依赖冲突或性能开销。</think>### 如何使ROS系统(Python 2.7)兼容Python 3.6的OpenCV? #### 问题分析 ROS Kinetic默认依赖Python 2.7,其环境变量`PYTHONPATH`会优先加载Python 2.7的库路径(如`/opt/ros/kinetic/lib/python2.7/dist-packages`)[^1]。而Python 3.6的OpenCV(如`opencv-python`)安装在Python 3的路径下(如`~/.local/lib/python3.6/site-packages`),两者因Python版本不兼容无法直接混用。 --- #### 解决方案 ##### 方法1:通过ROS多节点隔离环境 将Python 3.6代码封装为独立ROS节点,与Python 2.7节点通过ROS通信(如Topic/Service)交互。 **步骤**: 1. **创建Python 3.6节点**:编写Python 3.6脚本,使用`opencv-python`处理图像。 2. **通信接口**:通过ROS消息(如`sensor_msgs/Image`)传递数据。 3. **运行节点**: ```bash # 终端1(Python2.7环境) source /opt/ros/kinetic/setup.bash roscore # 终端2(Python3.6环境) source /opt/ros/kinetic/setup.bash export PYTHONPATH=/path/to/python3.6/site-packages:$PYTHONPATH # 临时覆盖路径 python3.6 python3_node.py ``` **优点**:彻底隔离环境,避免依赖冲突。 **缺点**:需设计通信协议,增加系统复杂度。 --- ##### 方法2:动态修改`PYTHONPATH` 在Python 3.6脚本中强制优先加载Python 3的OpenCV库。 **步骤**: 1. **安装Python 3.6的OpenCV**: ```bash pip3 install opencv-python # 引用[3] ``` 2. **在脚本中调整路径**: ```python import sys sys.path.insert(0, &#39;/home/user/.local/lib/python3.6/site-packages&#39;) # 添加Python3路径 import cv2 # 此时会优先加载Python3的cv2 ``` 3. **运行脚本时指定解释器**: ```bash python3.6 your_script.py ``` **注意**:若ROS调用了该脚本,需确保启动命令使用`python3.6`而非默认的`python`。 --- ##### 方法3:使用符号链接兼容库文件 将Python 3.6的OpenCV库链接到Python 2.7路径(需兼容性验证)。 **步骤**: 1. **查找Python3的cv2.so路径**: ```bash find ~/.local -name "cv2*.so" # 如 ~/.local/lib/python3.6/site-packages/cv2.so ``` 2. **创建符号链接**: ```bash sudo ln -s /path/to/python3.6/cv2.so /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so # 引用[2] ``` **风险**:Python 2.7可能无法加载Python 3.6编译的二进制文件,导致崩溃。 --- ##### 方法4:重新编译OpenCV支持双版本 编译OpenCV时同时启用Python 2.7和3.6接口。 **步骤**: 1. **下载OpenCV源码**: ```bash git clone https://github.com/opencv/opencv.git cd opencv && mkdir build && cd build ``` 2. **配置CMake**: ```bash cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D PYTHON2_EXECUTABLE=/usr/bin/python2.7 \ -D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \ -D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include \ -D PYTHON3_EXECUTABLE=/usr/bin/python3.6 \ -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6 \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3.6/dist-packages/numpy/core/include \ .. ``` 3. **编译并安装**: ```bash make -j4 sudo make install ``` **优点**:一劳永逸解决兼容性问题。 **缺点**:编译耗时长,需处理依赖冲突。 --- #### 推荐方案 - **轻度使用**:选择**方法2**,简单修改路径即可。 - **复杂系统**:选择**方法1**,隔离环境更稳定。 - **长期需求**:选择**方法4**,但需要一定的编译经验。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值