python中使用matlab时显示版本错误
一、问题描述
本人希望能通过Python调用Matlab引擎 (参考文章 python调用matlab程序 pycharm),在输入 python setup.py install 命令时出现问题。
(python38) D:\Program Files\MATLAB\R2021b\extern\engines\python>python setup.py install --user E:\anconda3\envs\python38\lib\site-packages\setuptools\dist.py:543: UserWarning: The version specified ('R2021b') is an invalid version, this may not work as expected with newer versions of setuptools, pip, and PyPI. Please see PEP 440 for more details. warnings.warn( E:\anconda3\envs\python38\lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. warnings.warn( E:\anconda3\envs\python38\lib\site-packages\setuptools\command\easy_install.py:144: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools. warnings.warn( Traceback (most recent call last): File "setup.py", line 80, in <module> setup( File "E:\anconda3\envs\python38\lib\site-packages\setuptools\_distutils\core.py", line 185, in setup return run_commands(dist) File "E:\anconda3\envs\python38\lib\site-packages\setuptools\_distutils\core.py", line 201, in run_commands dist.run_commands() File "E:\anconda3\envs\python38\lib\site-packages\setuptools\_distutils\dist.py", line 969, in run_commands self.run_command(cmd) File "E:\anconda3\envs\python38\lib\site-packages\setuptools\dist.py", line 1208, in run_command super().run_command(command) File "E:\anconda3\envs\python38\lib\site-packages\setuptools\_distutils\dist.py", line 988, in run_command cmd_obj.run() File "E:\anconda3\envs\python38\lib\site-packages\setuptools\command\install.py", line 74, in run self.do_egg_install() File "E:\anconda3\envs\python38\lib\site-packages\setuptools\command\install.py", line 123, in do_egg_install self.run_command('bdist_egg') File "E:\anconda3\envs\python38\lib\site-packages\setuptools\_distutils\cmd.py", line 318, in run_command self.distribution.run_command(command) File "E:\anconda3\envs\python38\lib\site-packages\setuptools\dist.py", line 1208, in run_command super().run_command(command) File "E:\anconda3\envs\python38\lib\site-packages\setuptools\_distutils\dist.py", line 987, in run_command cmd_obj.ensure_finalized() File "E:\anconda3\envs\python38\lib\site-packages\setuptools\_distutils\cmd.py", line 111, in ensure_finalized self.finalize_options() File "E:\anconda3\envs\python38\lib\site-packages\setuptools\command\bdist_egg.py", line 93, in finalize_options ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info") File "E:\anconda3\envs\python38\lib\site-packages\setuptools\_distutils\cmd.py", line 305, in get_finalized_command cmd_obj.ensure_finalized() File "E:\anconda3\envs\python38\lib\site-packages\setuptools\_distutils\cmd.py", line 111, in ensure_finalized self.finalize_options() File "E:\anconda3\envs\python38\lib\site-packages\setuptools\command\egg_info.py", line 219, in finalize_options parsed_version = parse_version(self.egg_version) File "E:\anconda3\envs\python38\lib\site-packages\pkg_resources\_vendor\packaging\version.py", line 266, in __init__ raise InvalidVersion(f"Invalid version: '{version}'") pkg_resources.extern.packaging.version.InvalidVersion: Invalid version: 'R2021b'x
显示错误
二、解决方案
原因是setuptools版本过高。setuptools在58.0版本以后弃用了一些方法,导致matlab.engine中的一些命令无法运行。在cmd中输入如下命令将setuptools降版本至58.0版本即可。
pip install setuptools==58.0
在安装完成后,再次运行 python setup.py install 命令,看到如下内容时,安装成功。
(python38) D:\Program Files\MATLAB\R2021b\extern\engines\python>python setup.py install --user running install running build running build_py creating build creating build\lib creating build\lib\matlab copying dist\matlab\mlarray.py -> build\lib\matlab copying dist\matlab\mlexceptions.py -> build\lib\matlab copying dist\matlab\__init__.py -> build\lib\matlab creating build\lib\matlab\engine copying dist\matlab\engine\basefuture.py -> build\lib\matlab\engine copying dist\matlab\engine\engineerror.py -> build\lib\matlab\engine copying dist\matlab\engine\enginehelper.py -> build\lib\matlab\engine copying dist\matlab\engine\enginesession.py -> build\lib\matlab\engine copying dist\matlab\engine\fevalfuture.py -> build\lib\matlab\engine copying dist\matlab\engine\futureresult.py -> build\lib\matlab\engine copying dist\matlab\engine\matlabengine.py -> build\lib\matlab\engine copying dist\matlab\engine\matlabfuture.py -> build\lib\matlab\engine copying dist\matlab\engine\__init__.py -> build\lib\matlab\engine creating build\lib\matlab\_internal copying dist\matlab\_internal\mlarray_sequence.py -> build\lib\matlab\_internal copying dist\matlab\_internal\mlarray_utils.py -> build\lib\matlab\_internal copying dist\matlab\_internal\__init__.py -> build\lib\matlab\_internal running install_lib creating C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab creating C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\basefuture.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\engineerror.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\enginehelper.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\enginesession.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\fevalfuture.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\futureresult.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\matlabengine.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\matlabfuture.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\_arch.txt -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\engine\__init__.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine copying build\lib\matlab\mlarray.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab copying build\lib\matlab\mlexceptions.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab creating C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\_internal copying build\lib\matlab\_internal\mlarray_sequence.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\_internal copying build\lib\matlab\_internal\mlarray_utils.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\_internal copying build\lib\matlab\_internal\__init__.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\_internal copying build\lib\matlab\__init__.py -> C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine\basefuture.py to basefuture.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine\engineerror.py to engineerror.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine\enginehelper.py to enginehelper.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine\enginesession.py to enginesession.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine\fevalfuture.py to fevalfuture.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine\futureresult.py to futureresult.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine\matlabengine.py to matlabengine.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine\matlabfuture.py to matlabfuture.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\engine\__init__.py to __init__.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\mlarray.py to mlarray.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\mlexceptions.py to mlexceptions.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\_internal\mlarray_sequence.py to mlarray_sequence.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\_internal\mlarray_utils.py to mlarray_utils.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\_internal\__init__.py to __init__.cpython-38.pyc byte-compiling C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlab\__init__.py to __init__.cpython-38.pyc running install_egg_info Writing C:\Users\Lenovo\AppData\Roaming\Python\Python38\site-packages\matlabengineforpython-R2021b-py3.8.egg-info