ROS兼容python2和python3同时使用


系统版本:ubuntu16.04

更新python3.5到python3.7

下载

wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1rc2.tgz

解压

tar zxvf Python-3.7.1rc2.tgz
cd Python-3.7.1rc2

编译

./configure
sudo make
sudo make install

先找的python3.7解释器位置,一般是
/usr/local/bin/python3.7

删除原来的软连接

rm -rf /usr/bin/python3
rm -rf /usr/bin/pip3

添加python3的软链接

ln -s /usr/local/bin/python3.7 /usr/bin/python3
#添加 pip3 的软链接
ln -s /usr/local/bin/pip3.7 /usr/bin/pip3

问题备忘

问题一: 报错ModuleNotFoundError: No module named ‘_ctypes’
解决办法

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev

问题二: zipimport.ZipImportError: can’t decompress data; zlib not available

解决方法 sudo apt-get install zlib

问题三: 出现locations that require TLS/SSL异常处理方法

 sudo apt-get install gcc libffi-devel zlib* openssl-devel

然后重新编辑和安装python7即可

创建虚拟环境,可以运行python3的同时兼容python2

以下内容在Ubuntu 16.04 x64和ROS kinetic中测试通过
事实上,只要在.py文件加上python3的shebang,rosrun的时候就会自动调用相应的解释器了:

#!/usr/bin/env python3

但是,在安装ros-kinetic-desktop-full的时候,也并没有安装python3相关的package,所以需要手动安装。

创建virtualenv环境

sudo pip install virtualenv
# 我在这使用的是Python3.6rc2,指向系统已安装的python3也可以。
virtualenv -p /usr/bin/python3 venv
source venv/bin/activate
python -V
# Python 3.6.0rc2

virtualenv -p /usr/bin/python3 venv
这个命令建立了一个venv文件夹,把他放到ROS工作空间去,用的时候source一下就可以了
如下图所示
在这里插入图片描述
问题:执行上面的命令是可能会遇到的问题
问题一:python ModuleNotFoundError : ‘CommandNotFound’
解决办法入下:

Check /usr/lib/command-not-found file, it is trying to find module
CommandNotFound, which is NOT shipped with python3.7 but DOES with
Ubuntu under directory /usr/lib/python3/dist-packages. What we need to
do is adding the directory to python import path:
vi .bashrc (or .profile) add line
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.7/site-packages:/usr/lib/python3/dist-packages
Pay attention that you may need to change the
/usr/local/lib/python3.7/site-packages to your own directory.
exit
and source .bashrc (or .profile)

问题二:No module named’lsb_release’
解决入下:

python3.7安装后提示
No module named’lsb_release’
修改/usr/bin/lsb_release
#!/usr/bin/python3.5m -ES

NOTE

source ros_test/devel/setup.zsh
# 如没有使用virtualenv,下一语句则跳过
source rosenv/bin/activate
rosrun py3test pytest.py//-如果要兼容python2,此语句不要执行

需要注意的是,即使使用的virtualenv中,python指向的是python3,但是只要不在.py文件中添加python3的shebang,rosrun还是会调用python2的。这样可以很方便地兼容原来Python2的Package。

发布了34 篇原创文章 · 获赞 2 · 访问量 2332

猜你喜欢

转载自blog.csdn.net/weixin_44088559/article/details/105116697