Как работать с абсолютным импортом при разработке пакета - PullRequest
0 голосов
/ 28 марта 2019

Уже давно я борюсь с импортом в пакетах.Когда я разрабатываю пакет, я везде читаю, что в подмодулях этого пакета предпочтительно использовать абсолютный импорт.Я это понимаю и мне это нравится больше.Но тогда мне не нравится, и я также прочитал, что вы не должны использовать sys.path.append('/path/to/package'), чтобы использовать свой пакет в разработке ...

Так что мой вопрос: как вы разрабатываете такой пакет с нуля,используя напрямую абсолютный импорт?На данный момент я разрабатываю пакет, используя относительный импорт, так как тогда я могу проверить код, который пишу, перед упаковкой и установкой, затем я изменяю импорт, как только у меня будет релиз, и собираю пакет.

Чтоправильный способ сделать такую ​​вещь?Например, в Pycharm вы бы пометили папку как «исходный каталог» и работали бы так, как если бы папка пакета находилась в пути.Тем не менее я читал, что это не правильный путь ... что я пропускаю?Как вы разрабатываете пакет при тестировании его кода?

1 Ответ

1 голос
/ 28 марта 2019

Ваш пробег может отличаться, но это то, что я обычно делаю:

В пакете (foo), абсолютное (import foo.bar) или относительное (import .bar) для меня не имеет значения, так какПока это работает.Иногда я предпочитаю относительный, особенно когда проект большой, и однажды я могу решить переместить несколько исходных файлов в подкаталог.

Как мне проверить?В моем $PYTHONPATH обычно содержится ., и моя иерархия каталогов выглядит следующим образом:

/path/to/foo_project
   /setup.py
   /foo
      /__init__.py
      /bar.py
   /test
      /test1.py
      /test2.py

тогда сценарий в foo_project/test/test1.py будет таким же, как вы обычно используете пакет, используя import foo.bar,И когда я проверю свой код, я окажусь в каталоге foo_project и запусту python test/test1.py.Поскольку у меня . в моем $PYTHONPATH, он найдет каталог foo и использует его как пакет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...