Это вопрос об Atom, но мне было бы любопытно, как другие IDE также решают эту проблему.
У меня есть проект Python, который использует setuptools аналогично этому примеру проекта, с именем foo :
[~/git-projects/foo] $ tree
.
├── foo
│ ├── __init__.py
│ ├── config.py
│ ├── foo.py
│ └── resources
│ ├── __init__.py
│ ├── classes
│ │ ├── __init__.py
│ │ └── bar.py
│ └── functions
│ ├── __init__.py
│ └── string.py
├── requirements.txt
└── setup.py
Это довольно типичная настройка setuptools. Файл setup.py
определяет необходимые пакеты из requirements.txt
и точку входа для приложения, которая является функцией main()
в foo/foo.py
.
Когда я настраиваюсь на разработку, я делаю следующее:
- Создание виртуальной среды
- Пробег
source venv/bin/activate
- Выполнить
pip3 install -e .
- Запустите
atom .
в ~/git-projects/foo
, чтобы открыть проект в Atom.
Здесь я столкнулся с проблемой. Допустим, я хочу импортировать класс с именем Bar
внутри foo/resources/classes/bar.py
. В Atom у меня есть автозаполнение, и, основываясь на структуре папок, я бы сделал следующее:
Atom распознает и выполняет автозаполнение на основе структуры моей папки, что приятно. Однако, когда я запускаю программу foo
, установленную через setuptools в моем терминале, я получаю следующую ошибку:
ModuleNotFoundError: No module named 'resources'
Я знаю, что это решается изменением моего оператора импорта на from foo.resources.classes.bar import Bar
, поскольку именно так работают пакеты на основе setuptools, но проблема в том, что я теряю функцию автозаполнения из Atom. По сути, он не распознает, когда я начинаю печатать from foo.resources.classes...
и т. Д. И т. Д.
Есть ли способ иметь оба? Т.е. может ли Atom распознавать setuptools и настраивать его автозаполнение соответственно? Или мой проект структурирован неправильно?
Спасибо!