Конфликтующие имена модулей Python в редактируемых зависимостях - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть 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.pyscript.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, но все безрезультатно.

...