Как найти полный путь к файлу DLL модуля Python? - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь программно определить путь к включенному / установленному файлу DLL для определенного пакета.Я прочитал множество SO страниц, но не могу найти никакого решения.Возможно, я что-то пропустил, и это невозможно?

Пакет capstone и был установлен вручную из источников с привязками python3 в Windows через Cygwin .Все работает.

# python3 -c "import os,inspect,capstone; print(os.path.dirname(inspect.getfile(capstone)))"
/usr/lib/python3.6/site-packages/capstone-4.0.0rc1-py3.6.egg/capstone

# python3 -c "import capstone; print(capstone._lib)"
capstone.dll
  1. Указанный выше путь к файлу *.egg, но этот путь на самом деле не существует,
    , если вы не разархивируете файл.
  2. В файле EGG местоположение находится в ./*.egg/capstone/lib/capstone.dll
  3. Но в ОС реальное местоположение системы capstone.dll находится в:
    /usr/lib/python3.6/site-packages/capstone/lib

Как получить истинный путь (3) в Python3?


РЕДАКТИРОВАТЬ:

Возможно это может быть полезным?Но я придумала эту уродливую вещь, которая могла легко сломаться, так что надеялась на более питонический путь.

# python3 -c "import capstone; print('DLL path: %s' % capstone._path_list[4] + '/' + capstone.__name__ + '/lib/' + capstone._lib)"
DLL path: /usr/lib/python3.6/site-packages/capstone/lib/capstone.dll

1 Ответ

0 голосов
/ 19 декабря 2018

Я "установил" capstone , скопировав:

  1. Python каталог привязок ( [GitHub]: aquynh / capstone - (мастер) capstone / bindings / python / capstone ) в моем cwd
  2. capstone.dll из двоичных файлов .zip ,в директории от # 1.

Начав готовить сложный (и общий) пример, я немного просмотрел источник (как наВначале он не нашел .dll - отсюда необходимость установки $ {LIBCAPSTONE_PATH} ) и заметил, что путь .dll хранится вcapstone._path:)

Выход :

[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q052946558]> ls
capstone  capstone-4.0-win64.zip  capstone-master.zip
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q052946558]> ls capstone
__init__.py   __pycache__  arm_const.py  arm64_const.py  evm.py        m680x.py        m68k.py        mips.py        ppc.py        sparc.py        systemz.py     tms320c64x.py        x86.py        xcore.py
__init__.pyc  arm.py       arm64.py      capstone.dll    evm_const.py  m680x_const.py  m68k_const.py  mips_const.py  ppc_const.py  sparc_const.py  sysz_const.py  tms320c64x_const.py  x86_const.py  xcore_const.py
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q052946558]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q052946558]> python3
Python 3.6.4 (default, Jan  7 2018, 15:53:53)
[GCC 6.4.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import capstone
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/cygdrive/e/Work/Dev/StackOverflow/q052946558/capstone/__init__.py", line 315, in <module>
    raise ImportError("ERROR: fail to load the dynamic library.")
ImportError: ERROR: fail to load the dynamic library.
>>>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q052946558]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q052946558]> LIBCAPSTONE_PATH=$(pwd)/capstone python3
Python 3.6.4 (default, Jan  7 2018, 15:53:53)
[GCC 6.4.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import capstone
>>> import os
>>> os.path.join(capstone._path, capstone._lib)
'/cygdrive/e/Work/Dev/StackOverflow/q052946558/capstone/capstone.dll'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...