Как загрузить нетронутый пакет Python в PyPI?

Что за волшебная команда «python setup.py some_incantation_here» для загрузки пакета в PyPI в форме, которую можно загрузить, чтобы получить исходный пакет в его исходной форме?

У меня есть пакет с исходным кодом и несколькими файлами изображений (как package_data). Если я сделаю «setup.py sdist register upload», файлы изображений .tar.gz будут исключены. Если я делаю «setup.py bdist_egg register upload», яйцо содержит изображения, но исключает файл setup.py. Я хочу иметь возможность загрузить файл, представляющий собой весь мой проект, также известный как "setup.py the_whole_freaking_thing register upload".

Возможно, лучший способ сделать это — вручную создать каталог моего проекта tar.gz и загрузить его с помощью веб-интерфейса PyPI?

Предупреждение: я пытаюсь избежать необходимости хранить простой проект, который я только что создал, в моем репозитории SVN, а также в PyPI — кажется пустой тратой времени отслеживать его историю и файлы в двух местах.


person Michael Gundlach    schedule 22.04.2009    source источник


Ответы (1)


Когда вы выполняете команду «sdist», то список включенных файлов контролирует ваш файл «MANIFEST.in», расположенный рядом с «setup.py», а не то, что вы указали в «package_data». Это как-то связано с шизофренической природой современных пакетов Python; "sdist" основан на distutils из стандартной библиотеки, а " bdist_egg" управляется модулем setuptools.

Чтобы решить эту проблему, попробуйте создать файл MANIFEST.in рядом с файлом setup.py и указать его содержимое следующим образом:

include *.jpg

Конечно, я представляю, что ваши «файлы изображений» — это настоящие изображения, а не образы дисков или образы ISO или что-то в этом роде; вам, возможно, придется настроить приведенную выше строку, если я ошибаюсь! Но ознакомьтесь с разделом Указание файлов для распространения. раздел документации distutils и посмотрите, не появятся ли эти файлы в исходном дистрибутиве .tar.gz! Удачи.

person Brandon Rhodes    schedule 23.04.2009
comment
Идеальный! Мне нужен был такой формат, как include nosenotify/*.png, так как мои файлы находились в подкаталоге — этот формат гарантировал, что каталог .tar.gz Nosenotify/ содержит файлы .png. - person Michael Gundlach; 23.04.2009
comment
PS Брэндон, по иронии судьбы, прочитав ваш ответ, я зашел в ваш блог и увидел сообщение за день до моего вопроса, в котором говорилось, что вы настолько устали от setup.py, что делаете пирон. :) - person Michael Gundlach; 06.05.2009