从matlab调用python会出现意外错误

时间:2016-01-11 20:27:31

标签: python matlab python-2.7 openssl

我试图在Matlab2015a中使用Python中的函数。这个函数可以从python解释器中调用而不会出现问题。但是,在matlab解释器中:

>> py.file.function()

给出错误Python Error: 'module' object has no attribute 'HTTPSConnection'

简单的函数可以在matlab中完成。这个涉及到其他软件包中的网络,我猜这有点混淆了matlab。因为我不认为我应该在matlab中明确导入任何内容,所以我不知道如何继续。关于这是否应该有效的任何想法?

另一种可能性是matlab使用自己的python版本而没有SSL支持。然而,matlab报告的python版本似乎没有支持这种可能性:

>> pyversion

   version: '2.7'
executable: '/usr/bin/python'
   library: 'libpython2.7.so.1.0'
      home: '/usr'
  isloaded: 1

常规HTTP似乎在那里:

>> py.httplib.HTTPConnection('')

ans =

带有属性的Python HTTPConnection:

          port: 80
          host: [1x0 py.str]
          sock: [1x1 py.NoneType]
source_address: [1x1 py.NoneType]
       timeout: [1x1 py.object]

<httplib.HTTPConnection instance at 0x7fc9ac79a0e0>

此外,这:

>> system('python -c ''import file; file.function()'' ')

同样失败,而从bash shell启动的完全相同的行按预期工作。

编辑:事实证明它适用于运行ubuntu 14.04和python 2.7.5的另一台机器。失败的是15.10和2.7.9。 pyversion显示相同的输出(因为它没有显示版本控制中的第三个数字)。

编辑:sys.path从matlab和python报告相同的内容:

>>> sys.path # this is python
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

在matlab中:

>> py.sys.path

ans = 

没有属性的Python列表。

['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

顺便说一句,工作的机器报告相同的路径。

编辑:正如注释中所指出的,LD_LIBRARY_PATH与问题有某种关联。但是,直接启动MATLAB可执行文件,绕过修改LD_LIBRARY_PATH的matlab shell脚本是不够的:即使使用干净值,失败也是一样。

>> system('echo $LD_LIBRARY_PATH')

ans =

 0

>> py.file.function()
Python Error: 'module' object has no attribute 'HTTPSConnection'

0 个答案:

没有答案