LINUX.ORG.RU

Питон::подгрузить модуль


0

1

в каталоге ./Project расположен проект, причем в ./Project/module лежит библиотека libmodule1.so и модуль-обертка для нее module1.py. Нужно в ./Project/task1/script1.py подключить module1.py. Удается так в script1.py

sys.path.append('./../module/')
from module1 import *
но в module1.py пришлось прописать
mod1=ctypeslib.load_library('libmatrix3D','./../module')
при этом если указать './module' то не работает. Но, этот же модуль нужно присоединять, например, в ./Project/task2/task21/script21.py, при этом ./../module не сработает.

Как правильно подгрузить сишную библиотеку libmodule1.so?



Последнее исправление: scireseacher (всего исправлений: 1)

Ответ на: комментарий от jerrylee

проблема вот в чем:

для ./Project/task1/script1.py я должен писать

mylib = cdll.LoadLibrary('./../module/lib.so')

а для для ./Project/task2/task21/script211.py я должен писать

mylib = cdll.LoadLibrary('./../../module/lib.so')

жестко привязываться на путь /home/user/Project/module/ не хочу.

scireseacher
() автор топика
Ответ на: комментарий от scireseacher

+ к посту выше

писать разные пути в модуле обертке module/module1.py для разных скриптов, а не в самих указанных скриптах

scireseacher
() автор топика
Ответ на: комментарий от scireseacher

module:

from ctypes import cdll


import os,sys

path = os.path.dirname(os.path.realpath(__file__))

if 'linux' in sys.platform:

    mylib=cdll.LoadLibrary("%s/lib.so" % path)
и импортировать как то так
import dir_with_modules.module

jerrylee
()

sys.path.append('./../module/')

Что мешает сделать module пакетом?

при этом если указать './module' то не работает. Но, этот же модуль нужно присоединять, например, в ./Project/task2/task21/script21.py, при этом ./../module не сработает.

Про dirname(__file__) уже сказали.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.