#python #python-2.7 #ibm-mq #pymqi
#python #python-2.7 #ibm-mq #pymqi
Вопрос:
Я пытаюсь настроить IBM MQ и pymqi на моем macbook. MQ выполняется через docker, никаких проблем нет. Я установил IBM MQ из https://developer.ibm.com/messaging/2019/02/05/ibm-mq-macos-toolkit-for-developers и следовал инструкциям. После этого я установил pymqi без каких-либо проблем.
Но при простом запуске import pymqi я получаю
ImportError: dlopen(/Users/.../Library/Python/2.7/lib/python/site-packages/pymqi/pymqe.so, 2): Library not loaded: @rpath/libmqic_r.dylib
Я работал над этим целый день, пробуя всевозможные ссылки, копирование, разрешения файлов, настройку переменных env и т.д. Похоже, что никакие предложения не работают, несмотря на то, что это довольно распространенная проблема (по крайней мере, если посмотреть на результаты Google).
libmqic_r.dylib доступен в двух расположениях, включая /opt/mqm/lib64
ниже приведен вывод otool для этого, который, как я заметил, не имеет LC_RPATH, но я действительно этого не понимаю… я относительно новичок в python
libmqic_r.dylib:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedfacf 16777223 3 0x00 6 14 928 0x00100085
Load command 0
cmd LC_SEGMENT_64
cmdsize 312
segname __TEXT
vmaddr 0x0000000000000000
vmsize 0x0000000000001000
fileoff 0
filesize 4096
maxprot 0x00000007
initprot 0x00000005
nsects 3
flags 0x0
Section
sectname __text
segname __TEXT
addr 0x00000000000006d0
size 0x000000000000088d
offset 1744
align 2^4 (16)
reloff 0
nreloc 0
flags 0x80000400
reserved1 0
reserved2 0
Section
sectname __cstring
segname __TEXT
addr 0x0000000000000f5d
size 0x000000000000004d
offset 3933
align 2^0 (1)
reloff 0
nreloc 0
flags 0x00000002
reserved1 0
reserved2 0
Section
sectname __unwind_info
segname __TEXT
addr 0x0000000000000fac
size 0x0000000000000048
offset 4012
align 2^2 (4)
reloff 0
nreloc 0
flags 0x00000000
reserved1 0
reserved2 0
Load command 1
cmd LC_SEGMENT_64
cmdsize 152
segname __DATA
vmaddr 0x0000000000001000
vmsize 0x0000000000001000
fileoff 4096
filesize 4096
maxprot 0x00000007
initprot 0x00000003
nsects 1
flags 0x0
Section
sectname __got
segname __DATA
addr 0x0000000000001000
size 0x0000000000000010
offset 4096
align 2^3 (8)
reloff 0
nreloc 0
flags 0x00000006
reserved1 0 (index into indirect symbol table)
reserved2 0
Load command 2
cmd LC_SEGMENT_64
cmdsize 72
segname __LINKEDIT
vmaddr 0x0000000000002000
vmsize 0x0000000000003000
fileoff 8192
filesize 8672
maxprot 0x00000007
initprot 0x00000001
nsects 0
flags 0x0
Load command 3
cmd LC_ID_DYLIB
cmdsize 48
name @rpath/libmqic_r.dylib (offset 24)
time stamp 1 Thu Jan 1 01:00:01 1970
current version 0.0.0
compatibility version 0.0.0
Load command 4
cmd LC_DYLD_INFO_ONLY
cmdsize 48
rebase_off 0
rebase_size 0
bind_off 8192
bind_size 40
weak_bind_off 0
weak_bind_size 0
lazy_bind_off 0
lazy_bind_size 0
export_off 8232
export_size 1008
Load command 5
cmd LC_SYMTAB
cmdsize 24
symoff 9312
nsyms 352
stroff 14952
strsize 1912
Load command 6
cmd LC_DYSYMTAB
cmdsize 80
ilocalsym 0
nlocalsym 281
iextdefsym 281
nextdefsym 68
iundefsym 349
nundefsym 3
tocoff 0
ntoc 0
modtaboff 0
nmodtab 0
extrefsymoff 0
nextrefsyms 0
indirectsymoff 14944
nindirectsyms 2
extreloff 0
nextrel 0
locreloff 0
nlocrel 0
Load command 7
cmd LC_UUID
cmdsize 24
uuid EDA21FCE-4BC7-39FC-A150-95D20DE313A6
Load command 8
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.13
sdk 10.13
Load command 9
cmd LC_SOURCE_VERSION
cmdsize 16
version 0.0
Load command 10
cmd LC_LOAD_DYLIB
cmdsize 48
name @rpath/libmqe_r.dylib (offset 24)
time stamp 2 Thu Jan 1 01:00:02 1970
current version 0.0.0
compatibility version 0.0.0
Load command 11
cmd LC_LOAD_DYLIB
cmdsize 56
name /usr/lib/libSystem.B.dylib (offset 24)
time stamp 2 Thu Jan 1 01:00:02 1970
current version 1252.50.4
compatibility version 1.0.0
Load command 12
cmd LC_FUNCTION_STARTS
cmdsize 16
dataoff 9240
datasize 72
Load command 13
cmd LC_DATA_IN_CODE
cmdsize 16
dataoff 9312
datasize 0
Комментарии:
1. Я тестировал новый пакет «IBM MQ macOS toolkit for developers», и все работает, пока вы правильно задаете переменную среды оболочки (DYLD_LIBRARY_PATH). Смотрите здесь: capitalware.com/rl_blog/?p=5336
Ответ №1:
IBM выпустила набор шаблонов разработки для MQ, и Python включен — https://github.com/ibm-messaging/mq-dev-patterns
Насколько я понимаю, большинство (я предполагаю, что не C #) были протестированы на Mac, поскольку у них есть инструкции по настройке Mac — https://github.com/ibm-messaging/mq-dev-patterns/tree/master/Python
Я подозреваю, что вы упускаете —
Добавьте /IBM-MQ-Toolkit-Mac-x64-9.1.1.0/bin и /IBM-MQ-Toolkit-Mac-x64-9.1.1.0/samp/bin в ПУТЬ, отредактировав /etc/paths
экспортировать DYLD_LIBRARY_PATH = /IBM-MQ-Toolkit-Mac-x64-9.1.1.0/lib64
Если вы впервые выполняете какое-либо кодирование на вашем Mac, возможно, вам не хватает компилятора c. Вам нужно будет установить Xcode.
Комментарии:
1. Спасибо за быструю передышку… но у меня есть это в path (только что дважды проверил): /opt/IBM/IBM-MQ-Toolkit-Mac-x64-9.1.1.0/bin /opt/IBM/IBM-MQ-Toolkit-Mac-x64-9.1.1.0/samp/bin. Также экспортированы DYLD .. и LD … с двумя расположениями, как с реальным путем, так и с псевдонимами через /opt /mqm
2. и
export DYLD_LIBRARY_PATH
?3. Поскольку вы новичок в разработке на Mac, вам также может понадобиться Xcode
4. Да, это тоже есть: /opt/mqm/lib64:/usr/local/lib:/opt/IBM/IBM-MQ-Toolkit-Mac-x64-9.1.1.0/lib64:/opt/mqm/lib:/opt/IBM/IBM-MQ-Toolkit-Mac-x64-9.1.1.0/lib
5. xcode — это то, что вы устанавливаете один раз при обновлении mac OS и забываете о нем.
Ответ №2:
Python должен знать о /opt/mqm/lib64
:
export PYTHONPATH=/opt/mqm/lib64
macOS следует знать о /opt/mqm/lib64
:
export DYLD_LIBRARY_PATH=/opt/mqm/lib64