python-3.x - 如何在 Matlab 上运行 python 脚本(带有 Anaconda 包)?
问题描述
我正在尝试在 Matlab 中运行一个使用多个 Anaconda 包(python 3.7)的 python 脚本(我想使用 fmincon,使用已经存在的 python 脚本来评估目标函数和约束。),但我应付不来。操作系统是 Windows 7。
我已经在互联网上阅读了一些主题,并找到了几种可能的方法来解决这个问题,但似乎都没有奏效!
如果我直接在windows cmd中写
conda activate base
cd <path to the folder of myscript>
python <myscript>.py
所有的工作。但是,如果我将这些行写入要由 matlab 调用的 .bat 文件 (system('.bat')),则会出现以下错误:
<path to the folder of myscript> >python <myscript>.py
Traceback (most recent call last):
File "myscript.py", line 30, in <module>
from polars import readPolars # a module of mine
File "<path to the folder of myscript>\polars.py", line 25, in <module>
from numpy import triu_indices, zeros, triu, ones, empty
File "C:\Users\tesisti\Anaconda3\Lib\site-packages\numpy\__init__.py", line 140, in <module>
from . import _distributor_init
File "C:\Users\tesisti\Anaconda3\Lib\site-packages\numpy\_distributor_init.py", line 34, in <module>
from . import _mklinit
ImportError: DLL load failed: The specified module could not be found.
我也读过这可能是由于 anaconda 和 matlab 没有相同的 PATH 环境变量,所以我应该手动添加。但是,我不清楚该怎么做。
有人可以帮助我吗?还提出新策略?
谢谢你。
马可
解决方案
我遇到过同样的问题。您基本上需要将 conda 路径添加到 Matlab PATH 环境变量中。这是 Matlab 中的一个解决方法,您应该将“pyExec”替换为您自己的 Anaconda 路径:
pyExec = 'C:\Users\chrli\anaconda3\';
pyRoot = fileparts(pyExec);
p = getenv('PATH');
p = strsplit(p, ';');
addToPath = {
pyRoot
fullfile(pyRoot, 'Library', 'mingw-w64', 'bin')
fullfile(pyRoot, 'Library', 'usr', 'bin')
fullfile(pyRoot, 'Library', 'bin')
fullfile(pyRoot, 'Scripts')
fullfile(pyRoot, 'bin')
};
p = [addToPath(:); p(:)];
p = unique(p, 'stable');
p = strjoin(p, ';');
setenv('PATH', p);
然后你可以从 Matlab 调用你的 Python 脚本:
!conda activate base
!python myscript.py
您可以通过比较在调用“conda activate base”(在 cmd 中)之前和之后在 cmd 终端中键入“echo %PATH%”的输出来仔细检查需要添加到 Matlab PATH 的路径。
希望能帮助到你。我根据这个讨论调整我的解决方案:https ://www.mathworks.com/matlabcentral/answers/443558-matlab-crashes-when-using-conda-environment-other-than-base
最好的,
卡洛斯。
推荐阅读
- sql - 在 C# 和 EF Core 中播种多对多数据库
- azure - 在 Azure 数据工厂中创建触发器期间使用参数定位文件
- android - 如何在 Kotlin 中显示来自 Firebase 实时数据库的用户名?
- bash - mpv 的 Lua 脚本 - 目录中每个文件的不同持续时间
- javascript - 需要弄清楚视频自动播放的逻辑。HTML、JS、video.js、PHP
- javascript - 自动登录时,如何确保获得正确的按钮 CSS/CTA 选择器?
- javascript - 在反应项目中隔离css类
- javascript - 在 mdn web docs Element.querySelector 方法中说它应该是后代,但示例显示其他
- jasper-reports - Jasper 中的报告在 XLSX 中导出时没有结果
- reactjs - 使用下拉选择值作为 api 参数抛出名称变量未定义错误