У меня есть 2 отдельных пакета Python, оба из которых я разрабатываю.Допустим, PackageA - это пакет, который я создал, а PackageB - это разветвленная версия общедоступного пакета, в котором я изменил несколько вещей.PackageA полагается на измененную версию PackageB.Первоначально это была структура пакета:
PackageA/
__init__.py
lib/
__init__.py
separate_utils.py
scripts/
__init__.py
script.py
PackageB/
lib/
utils.py
package/
class.py
В пакете B class.py
импортирует функции из utils.py
.В script.py
я использую функции из обоих separate_utils.py
, но я также использую модуль class.py
.С этой оригинальной структурой пакета, в script.py
, у меня есть эти импорты:
from lib.separate_utils import random_function
from PackageB.package import class
Однако, в class.py
, есть такой оператор импорта:
from lib import utils
Из-за моегоструктура каталогов, он пытается импортировать utils
из PackageA/lib
вместо PackageA/PackageB/lib
, что вызывает ошибку (cannot import name 'utils' from 'lib'
).В результате я изменил свою структуру каталогов, чтобы PackageB был редактируемым пакетом.
Random folder/
PackageA/
__init__.py
lib/
__init__.py
separate_utils.py
scripts/
__init__.py
script.py
PackageB/
__init__.py
lib/
utils.py
package/
class.py
setup.py
Однако даже после успешной установки с pip install -e [path_to_PackageB]
я получаю точную ошибку cannot import name 'utils' from 'lib'
.Я не могу понять, почему это происходит, и я прочитал всю документацию по модулям Python, а также кучу разных вопросов и сообщений в блоге StackOverflow.
Я пробовал разные варианты таких вещейкак from __future__ import absolute_import
, включая пустые __init__.py
файлы в каждом каталоге и использование sys.path.insert
и sys.path.append
, но все безрезультатно.