Pycharm импортирует из подмодуля Git - PullRequest
3 голосов
/ 19 июня 2020

У меня есть проект python в Pycharm, в котором есть вложенный подмодуль Git. Вот структура папок:

my-git-repo
    git-submodule-repo
        package1
           foo.py
           bar.py
    package2
        baz.py
    .gitmodules

Импорт в git-submodule-repo структурирован следующим образом:

foo.py:
from package1.bar import some_func

Однако Pycharm не распознает это и хочет, чтобы я вместо этого имел следующее:

foo.py:
from git-submodule-repo.package1.bar import some_func

Это проблематично c, потому что я не хочу менять весь импорт в git-submodule-repo (не кажется хорошей практикой и не масштабируется) и git-submodule-repo имеет дефисы, что недопустимо Python синтаксис для импорта (я не могу переименовать репо).

Мне также нужен способ импорта из git-submodule-repo в моем коде. Примерно так:

baz.py:
from git-submodule-repo.package1.bar import some_func

Но, конечно, без дефисов, делающих это недопустимым синтаксисом. Вот содержимое .gitmodules, если оно полезно:

[submodule "git-submodule-repo"]
    path = git-submodule-repo
    url = https://github.com/SomeAccount/git-submodule-repo.git

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 03 августа 2020

Душа 1 Используйте встроенную поддержку PyCharm, отмечая папки подмодулей как Sources в Preferences -> Project -> Project Structure. Недостатком этого подхода является то, что он не позволит вам запускать ваш код без PyCharm (например, с терминала на удаленном сервере), если вы не используете параметр удаленного интерпретатора PyCharm (работает только в PyCharm Professional).

Решение 2 Ознакомьтесь с решением , предложенным @Kevin относительно общего импорта python файлов из подмодуля git. Вы можете создать мягкую ссылку на библиотеку по интересу к root проекта. В вашем случае команда будет такой: $ ln -s git-submodule-repo.package1 package1 Тогда вы сможете импортировать его с from package1.bar import some_func из foo.py. Недостатком этого подхода является то, что он не является кроссплатформенным, например, вы не сможете запустить его из windows, если он вам понадобится.

...