Pycharm: практически изменить имя пакета - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть проект Python с исходным деревом, например:

|-src
|  |- module1
|  |  |- tests
|  |- module2
|  |  |- tests
|- ...

Он будет развернут в докере в виде пакета mypkg, способом, который я не могу изменить - прозрачно добавив mypkg папка и __init__.py.

Внутри моего кода я обычно импортирую вещи с import mypkg.module1 или from mypkg.module2 import xyz.Однако, поскольку в папке src нет папки mypkg__init__.py), pycharm не распознает этот импорт и сообщает об ошибках Unresolved reference и не может запустить pytest для каких-либо тестов (даже если они неполагаясь на любой ресурс, доступный только в докере).

Прямо сейчас для тестов я изменяю импорт в тестах с import mypkg.module1 на import module1, запускаю тесты в pycharm, исправляю ошибки, меняю их обратно исовершить.Но, как вы можете себе представить, это подвержено ошибкам и раздражает.

Можно ли как-то сказать pycharm или среде python (возможно, $PYTHONPATH, чтобы распознать мой пакет как mypkg и действовать соответственно?

Я использую Python 3.5+, исключительно (если это имеет значение).

1 Ответ

0 голосов
/ 25 февраля 2019

Чтобы Python и вашей IDE корректно разрешали импорт, вам потребуется создать каталог с именем mypkg, содержащий module1 и module2.Я могу придумать два способа сделать это:

1.Правильное решение: исправление структуры и установки проекта

Вместо создания каталога mypkg в процессе установки, создайте настоящий каталог mypkg внутри каталога src:

|-src
|  |- mypkg
|  |  |- module1
|  |  |  |- tests
|  |  |- module2
|  |  |  |- tests
|- ...

(Примечание: ваши тесты, вероятно, не должны быть внутри ваших пакетов. Вы не хотите отправлять их или разрешать пользователю импортировать их, не так ли?)

2,Обходной путь: Симлинки

Создайте каталог mypkg где-нибудь на PYTHONPATH.Затем создайте символические ссылки на module1 и module2.( Как создавать символические ссылки в Windows , Как создавать символические ссылки в Linux )

В каталоге вашего проекта:

|-src
|  |- module1
|  |  |- tests
|  |- module2
|  |  |- tests
|- ...

Где-то на вашемПИТОНПАТ:

|- mypkg
|  |- module1 -> path_to_your_project/src/module1
|  |- module2 -> path_to_your_project/src/module2
...