Должен ли я включить не-Python файлы в моем пакете? - PullRequest
1 голос
/ 07 июня 2019

У меня есть пакет, в котором его версия находится в файле VERSION.txt, в setup.py У меня есть следующее:

with open('VERSION.txt', 'r') as v:
    version = v.read().strip()

 setuptools.setup(
     ...
     version=version,
     ...
 )

Если я установлю и попробую запустить его, я получу FileNotFoundError: [Errno 2] No such file or directory: 'VERSION.txt', очевидно, потому что я не включаю VERSION.txt в свой пакет, но я не думаю, что должен. Для работы этого кода необходимо добавить include_package_data=True и создать MANIFEST.in.

Есть ли какой-нибудь другой подход, где я мог бы, в среде разработки, по-прежнему иметь это VERSION.txt, но не отправлять его внутри моего пакета?

1 Ответ

1 голос
/ 08 июня 2019

Информация о версии обычно включается в пакет, так как для части программного обеспечения может быть очень полезно знать и сообщать свою собственную версию. Хороший источник, чтобы проверить, как лучше всего это сделать, это шаблоны проектов, например список официальных cookiecutters .


Чтобы дать мой личный фаворит, мне нравится помещать переменную __version__ = '0.1.2' в мой самый верхний __init__.py файл:

mypackage
├───src
│   └───mypackage
│       └───__init__.py  # only content here is the version string
└───setup.py

Который я могу затем импортировать в setup.py ...

from src.mypackage import __version__

setuptools.setup(
    ...
    version=__version__,
    package_dir={'': 'src'},
    packages=find_packages(where='src'),
    ...
)

... а также легко получить доступ, когда мой пакет установлен

>>> from mypackage import __version__
>>> print(__version__)
0.1.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...