私はWindows 7/64を使用しています。shapely はpypi ページでWindows インストーラーを提供していませんが、最近は提供しているようです 。彼らの pypi ページとREADMEには、 chris gohlke の非公式バイナリを使用するように書かれています。理由はわかりません-pypiのようなものはdllをインストールできないため、コードがdllに依存している場合は手動でインストーラーを作成する必要がありますが、ms Visual Studioまたはなにか?
とにかく、gohlke のバイナリは winpython (2.7) でうまく動作しますが、matlab の新しいpython bridgeを使用してインポートしようとするとうまくいきません。shapely は、matlab でこの問題を引き起こしている Windows 上の唯一の Python ライブラリです。openCV、numpy、scipy、scikit、mosek、picos、PIL、future をすべて問題なく使用できます。gohlke のインストーラーが必要な唯一のライブラリでもあります。だから関係はあると思います。
私py.importlib.import_module('shapely')
がmatlabにいるとき、私はこれを取得します:
PyException with properties:
ExceptionObject: [1x3 py.tuple]
identifier: 'MATLAB:Python:PyException'
message: 'Python Error: [Error 1114] A dynamic link library (DLL) initialization routine failed'
cause: {}
stack: [1x1 struct]
ポップアップも表示されます。
Microsoft Visual C++ Runtime Library
R6034 "an application has made an attempt to load the c runtime library incorrectly"
これをグーグルで検索すると、 https://msdn.microsoft.com/en-us/library/ms235560(v=vs.90).aspxが表示されます
Visual Studio 2008. アプリケーションが、マニフェストを使用せずに C ランタイム ライブラリを読み込もうとしました。これは、サポートされていない Visual C++ DLL のロード方法です。マニフェストを使用してビルドするには、アプリケーションを変更する必要があります。アプリケーションは、マニフェストを使用して C ランタイム ライブラリをロードする必要があります。詳細については、「共有サイド バイ サイド アセンブリとしての Visual C++ ライブラリ」および「Visual Studio でのマニフェスト生成」を参照してください。... このエラーを修正するには アプリケーションを再ビルドして、マニフェストを含めます。Visual Studio でアプリケーションをビルドすると、結果の .exe または .dll ファイルにマニフェストが自動的に配置されます。コマンド ラインでビルドする場合は、mt.exe ツールを使用してマニフェストをリソースとして追加します。.exe をビルドする場合はリソース ID 1 を使用し、.dll をビルドする場合はリソース ID 2 を使用します。詳細については、次の方法を参照してください。
これは chris gohlke のコメント hereに関連しているようです。
ここに私が試したいくつかのことがあります。
マトラブで:
>> x=py.ctypes.util.find_library('geos_c')
x =
Python NoneType with no properties.
None
しかし、Pythonでも同じです!
>>> from ctypes.util import find_library
>>> print find_library('geos_c')
None
ただし、Python から見栄えよく使用できます。
>>> from shapely.geometry import MultiPolygon, Polygon, Point
>>> Point()
<shapely.geometry.point.Point object at 0x000000000399F2E8>
マトラブで:
>> x=py.ctypes.CDLL('C:\Users\nlab\Downloads\WinPython-64bit-2.7.9.5\python-2.7.9.amd64\Lib\site-packages\shapely\DLLs\geos_c.dll')
x =
Python CDLL with no properties.
<CDLL 'C:\Users\nlab\Downloads\WinPython-64bit-2.7.9.5\python-2.7.9.amd64\Lib\site-packages\shapely\DLLs\geos_c.dll',
handle e3f60000 at 7078b588>
>> x.GEOSversion()
No appropriate method, property, or field 'GEOSversion' for class
'py.ctypes.CDLL'.
>> x.initGEOS()
No appropriate method, property, or field 'initGEOS' for class 'py.ctypes.CDLL'.
>> x=py.ctypes.CDLL('C:\Users\nlab\Downloads\WinPython-64bit-2.7.9.5\python-2.7.9.amd64\Lib\site-packages\shapely\DLLs\geos_c.dll').GEOSversion()
No appropriate method, property, or field 'GEOSversion' for class
'py.ctypes.CDLL'.
Error: Unexpected MATLAB expression.
>> x=py.ctypes.CDLL('C:\Users\nlab\Downloads\WinPython-64bit-2.7.9.5\python-2.7.9.amd64\Lib\site-packages\shapely\DLLs\geos_c.dll').initGEOS()
No appropriate method, property, or field 'initGEOS' for class 'py.ctypes.CDLL'.
Error: Unexpected MATLAB expression.
>> py.dir(x)
ans =
Python list with no properties.
['_FuncPtr', '__class__', '__delattr__', '__dict__', '__doc__',
'__format__', '__getattr__', '__getattribute__', '__getitem__',
'__hash__', '__init__', '__module__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', '_func_flags_', '_func_restype_',
'_handle', '_name']
パイソンで:
>>> from ctypes import CDLL
>>> x=CDLL("C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.am
d64\\Lib\\site-packages\\shapely\\DLLs\\geos_c.dll")
>>> print x
<CDLL 'C:\Users\nlab\Downloads\WinPython-64bit-2.7.9.5\python-2.7.9.amd64\Lib\si
te-packages\shapely\DLLs\geos_c.dll', handle e3f60000 at 2292cc0>
>>> x.GEOSversion()
-469489536
>>> x.initGEOS()
36606784
>>> dir(x)
['GEOSversion', '_FuncPtr', '__class__', '__delattr__', '__dict__', '__doc__', '
__format__', '__getattr__', '__getattribute__', '__getitem__', '__hash__', '__in
it__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__se
tattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_func_fla
gs_', '_func_restype_', '_handle', '_name', 'initGEOS']
の検索はgeos_c.dll
、shapely
私のpythonのsite-packages
.
他のいくつかの SOの回答は、それが互換性のないmsvcr * .dllのコピーをパスのどこかに置くmatlabであり、疑わしいことを示唆しています:
>> py.pprint.PrettyPrinter().pprint(py.sys.path)
['',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\python27.zip',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\DLLs',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\plat-win',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\lib-tk',
'C:\\Program Files\\MATLAB\\R2015a\\bin\\win64',
'C:\\Users\\nlab\\AppData\\Roaming\\Python\\Python27\\site-packages',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\FontTools',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\win32',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\win32\\lib',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\Pythonwin']
それで:
>> import py.sys.path
>> path.remove('C:\Program Files\MATLAB\R2015a\bin\win64')
>> py.pprint.PrettyPrinter().pprint(py.sys.path)
['',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\python27.zip',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\DLLs',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\plat-win',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\lib-tk',
'C:\\Users\\nlab\\AppData\\Roaming\\Python\\Python27\\site-packages',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\FontTools',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\win32',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\win32\\lib',
'C:\\Users\\nlab\\Downloads\\WinPython-64bit-2.7.9.5\\python-2.7.9.amd64\\lib\\site-packages\\Pythonwin']
>> py.importlib.import_module('shapely')
ans =
Python module with properties:
ftools: [1x1 py.module]
ctypes_declarations: [1x1 py.module]
<module 'shapely' from 'C:\Users\nlab\Downloads\WinPython-64bit-2.7.9.5\python-2.7.9.amd64\lib\site-packages\shapely\__init__.pyc'>
わーい!しかし、使用しようとするとすぐに、まったく同じR6034エラーポップアップが表示されます
>> py.shapely.geometry.Point()
エラー ポップアップが 10 回以上表示されます。
以下は一度だけ実行します:
>> py.importlib.import_module('shapely.geometry')
Python Error: [Error 1114] A dynamic link library (DLL) initialization routine failed
...\AppData\Roaming\Python\Python27\site-packages
からも削除しましsys.path
たが、何も変わりませんでした。