Настройка setup.py для упаковки одного .py файла и одного файла данных без необходимости создания каких-либо папок
Дерево проекта:
$.
├── happy_birthday-art.txt
├── happy_birthday.py
├── MANIFEST.in
├── README.rst
└── setup.py
setup.py
from setuptools import setup
setup(
name='Happy_birthday',
py_modules=['happy_birthday'],
data_files=['happy_birthday-art.txt'],
entry_points={
'console_scripts': ['happy_birthday = happy_birthday:main', ],},
long_description=open('README.rst').read(),
)
Теперь, когда я делаю python setup.py sdist
, а затем pip install
созданный файл .tar.gz
в виртуальной среде, я получаю следующее сообщение:
warning: install_data: setup script did not provide a directory for 'happy-birthday-art.txt' -- installing right in '/home/username/.virtualenvs/happy_birthday'
Программа использует этот .txt файл, чтобы он не срабатывал при попытке запустить его впоследствии.
Но я не хочу устанавливать happy_birthday-art.txt
в отдельную папку. Я хочу установить его в папку, где установлен happy_birthday.py
. Кроме того, я не хочу использовать абсолютные пути в setup.py
. Как лучше всего настроить файл setup.py
?
Ответы
Ответ 1
Если у вас есть однофайловый модуль, такой файл не будет создан, ваш файл .py
будет перемещен непосредственно в каталог, который содержит другие модули python (например, t21 > ). Вот почему вам нужно создать каталог:
$ .
|-- happy_birthday/
|-- __init__.py
|-- art.txt
|-- MANIFEST.in
|-- README.rst
|-- setup.py
Ответ 2
http://docs.python.org/2/distutils/setupscript.html
"Вы можете указать параметры data_files как простую последовательность файлов без указания целевого каталога, но это не рекомендуется, и в этом случае команда установки выведет предупреждение. Установить файлы данных непосредственно в целевом каталоге, пустая строка должна быть заданный как каталог."
Однако здесь целевой каталог НЕ является папкой сайтов-пакетов, но
prefix folder, то есть корень вен. Если вы хотите, чтобы .txt находился в директории site-packages, он выглядел бы не только уродливым, но, похоже, действительно не поддерживался. С другой стороны, его можно установить в другое место в env, например, в разделе "share/doc/foo":
data_files=[('share/doc/foo', ['happy_birthday-art.txt'])],