Разработка Python в Atom - Setuptools - PullRequest
0 голосов
/ 05 ноября 2018

Это вопрос об 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 у меня есть автозаполнение, и, основываясь на структуре папок, я бы сделал следующее:

Importing Bar

Atom распознает и выполняет автозаполнение на основе структуры моей папки, что приятно. Однако, когда я запускаю программу foo, установленную через setuptools в моем терминале, я получаю следующую ошибку:

ModuleNotFoundError: No module named 'resources'

Я знаю, что это решается изменением моего оператора импорта на from foo.resources.classes.bar import Bar, поскольку именно так работают пакеты на основе setuptools, но проблема в том, что я теряю функцию автозаполнения из Atom. По сути, он не распознает, когда я начинаю печатать from foo.resources.classes... и т. Д. И т. Д.

Есть ли способ иметь оба? Т.е. может ли Atom распознавать setuptools и настраивать его автозаполнение соответственно? Или мой проект структурирован неправильно?

Спасибо!

...