у меня виндовс 7/64. shapely не предлагает установщики Windows на своей странице pypi, хотя они кажется недавно. их страница pypi и их README говорят использовать неофициальные двоичные файлы Криса Гольке. мне не ясна причина - что-то вроде pypi не может установить dll, поэтому вам нужно сделать установщик вручную, если ваш код зависит от dll, но создание установщика - это боль, потому что вам нужна MS Visual Studio или что-нибудь?
в любом случае, двоичный файл Gohlke отлично работает для меня в winpython (2.7), но не когда я пытаюсь импортировать с помощью нового мост Python. shapely - единственная библиотека Python для Windows, которая доставляет мне эту проблему в Matlab - я могу использовать openCV, numpy, scipy, scikit's, 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 без использования манифеста. Это неподдерживаемый способ загрузки библиотек DLL Visual C++. Вам нужно изменить приложение для сборки с помощью манифеста. Приложения должны использовать манифест для загрузки библиотеки времени выполнения C. Дополнительные сведения см. в статьях Библиотеки Visual C++ как общие параллельные сборки и создание манифеста в Visual Studio. ... Чтобы исправить эту ошибку Перестройте приложение, чтобы оно включало манифест. Создание приложения с помощью Visual Studio автоматически помещает манифест в полученный файл .exe или .dll. Если вы выполняете сборку из командной строки, используйте инструмент mt.exe, чтобы добавить манифест в качестве ресурса. Используйте идентификатор ресурса 1, если вы создаете .exe, и идентификатор ресурса 2, если вы создаете .dll. Дополнительные сведения см. в разделе Практическое руководство. Внедрение манифеста в приложение C/C++».
это, кажется, связано с прокомментируйте здесь.
вот еще несколько вещей, которые я пробовал.
в матлабе:
>> x=py.ctypes.util.find_library('geos_c')
x =
Python NoneType with no properties.
None
но то же самое в питоне!
>>> from ctypes.util import find_library
>>> print find_library('geos_c')
None
однако я могу использовать shapely из 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
.
a пара других ответы SO предполагают, что Matlab помещает свою несовместимую копию msvcr*.dll где-то на пути, и подозрительно:
>> 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']
so:
>> 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
, но это ничего не изменило.