Скажем, у меня очень простой пакет со следующей структурой:
.
├── foo
│ ├── bar
│ │ └── __init__.py
│ └── __init__.py
└── setup.py
Содержимое файлов:
-
setup.py
:from distutils.core import setup setup( name='foobar', version='', packages=['foo', 'foo.bar'], url='', license='Apache License 2.0', author='foobar', author_email='', description='' )
-
foo/bar/__init__.py
:def foobar(x): return x
-
Остальные файлы пустые.
Я устанавливаю пакет с помощью pip
:
cd foobar
pip install .
и может подтвердить, что он установлен правильно.
Теперь я хочу создать отдельный пакет с заглушками:
.
├── foo
│ ├── bar
│ │ └── __init__.pyi
│ └── __init__.pyi
└── setup.py
Содержимое файлов:
-
setup.py
:from distutils.core import setup import sys import pathlib setup( name='foobar_annot', version='', packages=['foo', 'foo.bar'], url='', license='Apache License 2.0', author='foobar', author_email='', description='', data_files=[ ( 'shared/typehints/python{}.{}/foo/bar'.format(*sys.version_info[:2]), ["foo/bar/__init__.pyi"] ), ], )
-
foo.bar.__init__.pyi
:def foobar(x: int) -> int: ...
Я могу установить этот пакет, увидеть, что он создает anaconda3/shared/typehints/python3.5/foo/bar/__init__.pyi
в моем корневом каталоге Anaconda, но не похоже, что он распознан PyCharm (я не получаю никаких предупреждений). Когда я помещаю pyi
файл в основной пакет, все работает нормально.
Буду благодарен за любые подсказки, как сделать эту работу:
- Я пытался сделать что-то из PEP 484 - Хранение и распространение файлов-заглушек, но безрезультатно. Даже часть
pathlib
кажется оскорбленной моей версиейdistutils
- PY-18597 и https://github.com/python/mypy/issues/1190#issuecomment-188526651 кажутся связанными, но почему-то я не могу соединить точки.
- Я попытался поместить заглушки в
.PyCharmX.X/config/python-skeletons
, но это не помогло. '
Некоторые вещи, которые работают, но не решают проблему:
- Включение файлов-заглушек в текущий проект и маркировка в качестве источников.
- Добавление корня заглушки в путь интерпретатора (по крайней мере, в некоторых простых случаях).
Итак, вопросы: Как создать минимальный дистрибутивный пакет с заглушками Python, который будет распознаваться существующими инструментами. На основании экспериментов я подозреваю одну из двух проблем:
- Я неправильно понял структуру, которая должна быть создана пакетом в
shared/typehints/pythonX.Y
- если это так, как мне определитьdata_files
? - PyCharm не рассматривает эти файлы вообще (это, кажется, противоречит некоторым комментариям в связанной проблеме).
- Предположим, что все работает нормально, но я допустил некоторую ошибку конфигурации и искал внешнюю проблему, которая не существует.
- Существуют ли установленные процедуры для устранения таких проблем?