我想要做的就是安装并使用 matplotlib。
我在 Ubuntu 16.04 上使用 ROS。虽然 ROS 与我现在的目标无关,但我知道由于 ros kinetic 使用 python2.7,获取 catkin 工作区很棘手,因为我需要在 ros 的 PYTHONPATH 中使用 python2.7,但如果我需要为 matplotlib 使用 python3.8,它也必须在 PYTHONPATH 中。我不太熟悉如何在 Linux 上处理 python,但我在尝试解决这个问题的过程中学到了很多东西。
python版本是Python 2.7.12
python3 版本是 Python 3.8.5,我使用本网站
pip 和 pip3 版本结果出现此错误:
Traceback (most recent call last):
File "/home/mike/.local/bin/pip", line 5, in <module>
from pip._internal.cli.main import main
File "/usr/lib/python3/dist-packages/pip/__init__.py", line 13, in <module>
from pip.exceptions import InstallationError, CommandError, PipError
File "/usr/lib/python3/dist-packages/pip/exceptions.py", line 6, in <module>
from pip._vendor.six import iteritems
File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 92, in <module>
vendored("requests.packages.urllib3.packages.ordered_dict")
File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 33, in vendored
__import__(vendored_name, globals(), locals(), level=0)
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap>", line 618, in _load_backward_compatible
File "<frozen zipimport>", line 259, in load_module
File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/packages/ordered_dict.py", line 11, in <module>
File "/usr/lib/python2.7/_abcoll.py", line 70, in <module>
Iterable.register(str)
AttributeError: type object 'Iterable' has no attribute 'register'
很可能我根本没有安装 pip。我以前也遇到过这个问题,我能够正确安装 pip3,但我猜它又坏了。
我的 PYTHONPATH 环境变量是:/usr/lib/python3.8:/usr/lib/python2.7
我的 .bashrc 的最后几行应该是唯一在这种情况下重要的行:
#source /opt/ros/kinetic/setup.bash
#source ~/catkin_ws/devel/setup.bash
#source ~/Documents/ROS/SRCAutoCar/devel/setup.bash
#source /usr/share/drcsim/setup.sh
#manually added PYTHONPATH for catkin_make
#export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.8/dist-packages
export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.8
export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7
export TURTLEBOT3_MODEL=waffle
我尝试使用安装 pip本网站,但是在运行 python get-pip.py 命令时,结果却是:
File "/usr/lib/python3.8/site.py", line 184
file = sys.stderr)
^
SyntaxError: invalid syntax
这是有道理的,因为我调用的是 python2.7,但它使用的是 python3.8。我不知道如何解决这个问题。
无论如何,回到主要问题,我安装了 matplotlib 并将其导入到 python 脚本中:
import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[1,4,9,16])
plt.show()
使用 python3 运行该脚本的结果是:
Traceback (most recent call last):
File "test.py", line 1, in <module>
import matplotlib.pyplot as plt
File "/usr/lib/python3/dist-packages/matplotlib/__init__.py", line 118, in <module>
import distutils.sysconfig
ModuleNotFoundError: No module named 'distutils.sysconfig'
问题是,当我尝试从 apt 安装 python3-distutils 或 python-distutils 时,apt 找不到它。我也从 apt 安装了 python3-distutils-extra 和 python-distutils-extra。
我发现可能的解决方案但运行命令
python3 -c "import sysconfig"
python3 -c "from distutils import sysconfig as distutils_sysconfig"
没有提供任何帮助。另一个可能的解决方案也不起作用。我创建了一个新的 python 文件并复制了脚本,但出现了一些错误。我修复了一些,但错误太多了。
我觉得我有几个问题,
首先,python 版本全都搞混了。当我需要 python2.7 来安装某些东西(例如 python get-pip.py)时,它使用的是 python3.8。当询问 pip3 是什么版本时,它调用的是 python 2.7 中的文件。我认为解决方案可能与环境变量有关,但我不知道。
其次,python3.8 可能安装不正确。我会重新安装它,但我知道这可能会搞乱我的操作系统。我还安装了 python3 和 python 3.5 试图解决这个问题。我希望这不是问题,因为 PYTHONPATH 环境变量不指向这两个
第三,pip 安装不正确。我尝试了几种解决方案,但都没有奏效。
我感谢您能提供的任何帮助,谢谢!