Python 3.7 скомпилированный Fortran PYD (DLL) не работает.[WinError 1114] Сбой процедуры инициализации библиотеки динамических ссылок (DLL) - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь помочь коллеге получить модуль Fortran, скомпилированный и запущенный на нашем сервере.Он может скомпилировать / запустить его локально на своем компьютере, но когда я пытаюсь реплицировать среду на наших ксеноновых серверах, модуль не загружается в сценарии.

Среда: WinServer2012R2 с процессором Intel (R) Xeon (R) E5-2697 v2
Компилятор: tdm64-gcc-5.1.0-2.exe (с проверкой поддержки fortran при установкевремя)
версия Anaconda: 4.5.11
версия Python: Python 3.7.1 (по умолчанию, 28 октября 2018 г., 08:39:03) [MSC v.1912 64 бит (AMD64)] :: Anaconda, Inc. на win32

Команда компиляции:

python C:\ProgramData\Anaconda3\envs\python_server\Scripts\f2py.py -m nnpx -c --fcompiler=gnu95 --compiler=mingw32  nnpx.f90 --f90flags="-mwindows -m64 -march='ivybridge' -fopenmp -lgomp"

ПРИМЕЧАНИЕ: У меня естьна самом деле пробовал несколько комбинаций этих флагов f90, ни одна из которых не была волшебной комбинацией.
Модуль, кажется, компилирует OK и создает файл с именем "nnpx.cp37-win_amd64.pyd", который я помещаю в ту же папку, что и тестовый скрипт, показанный ниже

Тестовый питонскрипт, пытающийся загрузить модуль (PYD):

#### BEGIN Script Snippet#########################
import ctypes
import pdb

ctypes.WinDLL("nnpx.cp37-win_amd64.pyd")

#; pdb.set_trace()
#############################
import nnpx as nn

#### END Script Snippet#########################

Вот ошибка, которую я получаю при попытке загрузить эту DLL:

(python_server) e:\Python_Server\Fortran>python ..\scripts\nnpx_test.py
Traceback (most recent call last):
  File "..\scripts\nnpx_test.py", line 24, in <module>
    ctypes.WinDLL("nnpx.cp37-win_amd64.pyd")
  File "C:\ProgramData\Anaconda3\envs\python_server\lib\ctypes\__init__.py", line 356, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 1114] A dynamic link library (DLL) initialization routine failed

Ниже приведены ошибки, связанные с просмотром системных событий Windows:

Fault bucket 1820906866837524874, type 4
Event Name: APPCRASH
Response: Not available
Cab Id: 0

Problem signature:
P1: python.exe
P2: 3.7.1150.1013
P3: 5bd5bc42
P4: libgfortran_64-3.dll
P5: 0.0.0.0
P6: a688a670
P7: c0000005
P8: 0000000000018ae0
P9: 
P10: 

Attached files:
C:\Users\myuserpin\AppData\Local\Temp\WERBAB7.tmp.appcompat.txt
C:\Users\myuserpin\AppData\Local\Temp\WERC074.tmp.WERInternalMetadata.xml
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_python.exe_b5aa8e775891040bdd452465e375c1e92ab7d9_c1c75637_cab_3e80c082\memory.hdmp
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_python.exe_b5aa8e775891040bdd452465e375c1e92ab7d9_c1c75637_cab_3e80c082\triagedump.dmp

These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportArchive\AppCrash_python.exe_b5aa8e775891040bdd452465e375c1e92ab7d9_c1c75637_3cf0dd9f

Analysis symbol: 
Rechecking for solution: 0
Report Id: 941538b8-e9d8-11e8-810d-d89d67f4dd04
Report Status: 0
Hashed bucket: 19c0c60458b6bae2d9452925d6eb918a

.

Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0

Problem signature:
P1: python.exe
P2: 3.7.1150.1013
P3: 5bd5bc42
P4: libgfortran_64-3.dll
P5: 0.0.0.0
P6: a688a670
P7: c0000005
P8: 0000000000018ae0
P9: 
P10: 

Attached files:
C:\Users\myuserpin\AppData\Local\Temp\WERBAB7.tmp.appcompat.txt
C:\Users\myuserpin\AppData\Local\Temp\WERC074.tmp.WERInternalMetadata.xml
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_python.exe_b5aa8e775891040bdd452465e375c1e92ab7d9_c1c75637_cab_3e80c082\memory.hdmp
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_python.exe_b5aa8e775891040bdd452465e375c1e92ab7d9_c1c75637_cab_3e80c082\triagedump.dmp

These files may be available here:
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_python.exe_b5aa8e775891040bdd452465e375c1e92ab7d9_c1c75637_cab_3e80c082

Analysis symbol: 
Rechecking for solution: 0
Report Id: 941538b8-e9d8-11e8-810d-d89d67f4dd04
Report Status: 4
Hashed bucket: 

.

Faulting application name: python.exe, version: 3.7.1150.1013, time stamp: 0x5bd5bc42
Faulting module name: libgfortran_64-3.dll, version: 0.0.0.0, time stamp: 0xa688a670
Exception code: 0xc0000005
Fault offset: 0x0000000000018ae0
Faulting process id: 0x4d14
Faulting application start time: 0x01d47de553900866
Faulting application path: C:\ProgramData\Anaconda3\envs\python_server\python.exe
Faulting module path: C:\TDM-GCC-64\bin\libgfortran_64-3.dll
Report Id: 941538b8-e9d8-11e8-810d-d89d67f4dd04
Faulting package full name: 
Faulting package-relative application ID: 

Проверка зависимостей: Я также попытался проверить зависимости, как это было предложено здесь , но, похоже, их не гладятотлично (именно поэтому я предполагаю, что я не могу заставить Python правильно загрузить модуль).Мне пришлось скопировать «libgcc_s_seh_64-1.dll» и «libgfortran_64-3.dll» в ту же папку, что и файл PYD, а затем они отображаются как «правильные» в проводнике зависимостей, но «python37.dll» никогда неполучает правильную контрольную сумму.Я не знаю, имеет ли это значение, но я пробовал каждую копию python37.dll (в каждой среде conda), которую я могу найти в своей системе, и ни одна не работает.Все они дают мне «неверную контрольную сумму» в контролере зависимостей.

Есть мысли или предложения о том, как заставить этот модуль FORTRAN правильно загружаться в скрипт Python?

WITH python37.dll in same folder as PYD WITHOUT python37.dll in same folder as PYD

...