Почему Python не может найти общие объекты, которые находятся в каталогах в sys.path?

Я пытаюсь импортировать pycurl:

$ python -c "import pycurl"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: libcurl.so.4: cannot open shared object file: No such file or directory

Теперь, libcurl.so.4 находится в /usr/local/lib. Как Вы видите, это находится в sys.path:

$ python -c "import sys; print(sys.path)"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']

Любая справка будет значительно цениться.

118
задан BR123 16 September 2019 в 10:37
поделиться

1 ответ

sys.path ищется только для модулей Python. Для динамически подключаемых библиотек искомые пути должны быть в LD_LIBRARY_PATH . Убедитесь, что ваш LD_LIBRARY_PATH включает / usr / local / lib , и если нет, добавьте его и попробуйте еще раз.

Дополнительная информация ( источник ]):

В Linux переменная среды LD_LIBRARY_PATH - разделенный двоеточием набор каталогов, где библиотеки следует искать сначала, прежде чем стандартный набор справочников; этот полезно при отладке новой библиотеки или используя нестандартную библиотеку для специального назначения. Среда переменная LD_PRELOAD общие списки библиотеки с функциями, которые отменяют стандартный набор, так же как /etc/ld.so.preload делает. Эти реализуется загрузчиком /lib/ld-linux.so. Я должен отметить, что, в то время как LD_LIBRARY_PATH работает на многих Unix-подобных систем, не работает на все; например, этот функционал доступен на HP-UX, но как переменная среды SHLIB_PATH и в AIX эта функция реализована переменная LIBPATH (с тем же синтаксис, список, разделенный двоеточиями).

Обновление: для установки LD_LIBRARY_PATH , используйте одно из следующих, в идеале в вашем ~ / .bashrc или эквивалентный файл:

export LD_LIBRARY_PATH=/usr/local/lib

или

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

Используйте первую форму, если она пуста (эквивалентна пустой строке или вообще отсутствует), и вторую форму, если это не так. Обратите внимание на использование экспорта .

151
ответ дан 24 November 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: