«Ошибка импорта: попытка относительного импорта без известного родительского пакета» в *установленном* пакетеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 «Ошибка импорта: попытка относительного импорта без известного родительского пакета» в *установленном* пакете

Сообщение Anonymous »

В моем проекте установлен пакет, который я разработал сам. При попытке импортировать функции из этого пакета и последующем запуске кода я получаю вышеуказанную ошибку. Это началось сразу после того, как я реструктурировал каталоги в более «обычную» конфигурацию (я учился по ходу дела, поэтому все было в некотором беспорядке).
[ПОНЯТИЯ: вы можете пропустить эту часть.
Этот проект начинался с очень маленького проекта и рос по мере того, как я добавлял к нему новые элементы. Он основан на Flask, поэтому основной код находится в app.py; В качестве помощников я создал несколько десятков функций. Когда я узнал, я обнаружил, что могу выделить их в отдельный файл и импортировать, а затем создать пакет библиотеки для распространения на случай, если они понадобятся кому-то еще в моей компании. Все это работало достаточно хорошо, и я смог сослаться на установленный пакет. Однако в рамках моих усилий по перемещению этого в систему контроля версий я создал новую структуру каталогов (основной каталог Projects, отдельные подкаталоги для проекта UTILS_DEV и пакета SPECIAL_FUNCTIONSLIB на одном уровне). Следовательно, исходный код пакета находится не там, где он был, но я не думаю, что это имеет значение, если пакет был установлен и включен в каталоги библиотеки.]
Я попробовал следующее строки импорта:

Код: Выделить всё

import special_functionslib
from special_functions import *
from special_functionslib.special_functions import *
from special_functions import func1, func2, func3
from SPECIAL_FUNCTIONSLIB.special_functions import func1, func2, func3
from ..SPECIAL_FUNCTIONSLIB.special_functions import func1, func2, func3
Фактический файл кода — /export/home/dlevey/Projects/UTILS_DEV/app.py, а код пакета — /export/home/dlevey/Projects/ SPECIAL_FUNCT IONSLIB/special_functions.py. Я могу убедиться, что пакет установлен (как в системном каталоге, так и в каталоге моей библиотеки), запустив «sudo pip list» и «pip list» соответственно. Я также вижу его при вводе:



installed_packages_list = sorted(["%s== %s" % (i.key, i.version) для i в установленных_пакетах])
для пакета в списке установленных_пакетов:
... print(package)



в консоли Python. Однако по какой-то причине он НЕ отображается как доступный в консоли Python при вводе help('modules') - я предполагаю, что это по той же причине. Каждая из вышеперечисленных команд импорта, кстати, завершается с ошибкой в ​​консоли.
Я уверен, что нужно больше информации, но не знаю, что именно. Пожалуйста, дайте мне знать, что еще я могу предоставить.
Как видите, я попытался указать имя модуля имени пакета (файла кода) и информацию об относительном пути - ничего из этого не помогло. Я по-прежнему получаю ту же ошибку при попытке вызвать файл app.py. Я вижу похожие вопросы, на которые были даны ответы при обсуждении структуры каталогов, но ни один из них не касается собранных и установленных пакетов, а только локального кода.
[ОБНОВЛЕНИЕ: 17 октября, 15:20 UTC]
Когда я устанавливал, я делал это с помощью pip, указывая на файл .whl. Я сделал это дважды подряд, чтобы гарантировать, что это будет доступно не только моему локальному пользователю, но и любому пользователю. В результате пакет указан дважды:

Код: Выделить всё

/export/home/dlevey/.local/lib/python3.12/site-packages/special_functionslib-0.8.7.dist-info
/usr/local/lib/python3.12/site-packages/special_functionslib-0.8.7.dist-info
Это было так, как я и ожидал. Оба этих каталога находятся в моем sys.path:

Код: Выделить всё

Python 3.12.6 (main, Sep  9 2024, 00:00:00) [GCC 14.2.1 20240801 (Red Hat 14.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib64/python312.zip', '/usr/lib64/python3.12', '/usr/lib64/python3.12/lib-dynload', '/export/home/dlevey/.local/lib/python3.12/site-packages', '/usr/local/lib64/python3.12/site-packages', '/usr/local/lib/python3.12/site-packages', '/usr/lib64/python3.12/site-packages', '/usr/lib/python3.12/site-packages']
>>> import special_functionslib
Traceback (most recent call last):
File "", line 1, in 
ModuleNotFoundError: No module named 'special_functionslib'
>>>
Не знаю, что еще проверить — есть ли в настройках самого пакета что-то, что не позволяет импортировать себя? В этом каталоге я вижу 7 записей, которые имеют те же имена файлов, что и другие пакеты.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -on-instal
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»