Как правильно распространять каталоги «bin» и «tests» для пакета Python? - PullRequest
0 голосов
/ 30 октября 2019

Я создал пакет Python.

По совету нескольких интернет-источников (включая https://github.com/pypa/sampleproject) я настроил структуру каталогов следующим образом:

root_dir
├── bin
│   └── do_stuff.py
├── MANIFEST.in
├── README.md
├── my_lib
│   ├── __init__.py
│   ├── __main__.py
│   └── my_lib.py
├── setup.cfg
├── setup.py
├── important_script.py
└── tests
    ├── __init__.py
    └── test_lib.py

Я включил tests, bin и important_script.py в манифесте и установите для include_package_data в setup.py значение True.

Однако после запуска pip install root_dir я вижу, что он правильно установлен my_lib, но binи tests были просто помещены прямо в Lib/site-packages, как будто они были отдельными пакетами.

Я вообще не могу найти important_script.py, и я не думаю, что он был установлен.

Как правильно включить эти файлы / каталоги в мою установку?

EDIT

Итак, получается, что каталоги bin и tests, помещенные непосредственно в каталог site-packages, были вызваны чем-то, что я делал ранее, но яне могу найти что. В какой-то момент каталог build и dist были сгенерированы в моем root_dir (я полагаю, с помощью pip или setuptools?), И любые изменения, которые я внес в проект после этого, фактически не обнаруживались в установленном пакете. После удаления этих каталогов я больше не могу воспроизвести эту проблему.

1 Ответ

1 голос
/ 30 октября 2019

Пример проекта не распространяется ни bin, ни tests, он даже явно исключает tests.

Чтобы включить bin, вы должны использовать scripts или entry_points (как в примере проекта). Добавьте это к вашему setup.py к setup() вызову:

scripts=['bin/do_stuff.py'],

Чтобы включить tests, вы должны реструктурировать свое дерево, включив в него каталог tests в каталоге пакета:

root_dir
├── bin
│   └── do_stuff.py
├── MANIFEST.in
├── README.md
├── my_lib
│   ├── __init__.py
│   ├── __main__.py
│   └── my_lib.py
│   └── tests
│       ├── __init__.py
│       └── test_lib.py
├── setup.cfg
├── setup.py
├── important_script.py
...