Подтвердить что ты не робот

Настройка 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?

4b9b3361

Ответ 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'])],