Включение файлов, не относящихся к Python, в пакет Python - PullRequest
2 голосов
/ 20 июня 2019

Я создал и опубликовал пакет Python, но я просто не могу включить его в текстовый файл.

Вот репозиторий: https://github.com/void4/gimpscm

Файл, который мне нуженinclude is procdump.txt, расположенный в каталоге gimpscm.

Таким образом, макет выглядит следующим образом:

setup.py
setup.cfg
MANIFEST.in
gimpscm/
       /__index__.py
       /procdump.txt
       /(other .py files)

Я пытался:

  • , включая package_dataдиректива в setup.py
  • различные директивы MANIFEST.in

Текущий setup.py включает в себя:

  package_data = {"gimpscm": ["gimpscm/procdump.txt"]},
  include_package_data=True,

И MANIFEST.in содержит:

recursive-include gimpscm *.txt

Файл txt включен как файлы .py в подкаталоге gimpscm zip в каталоге dist.Но когда я pip install gimpscm, файл просто не устанавливается.

Я публикую пакет следующим образом:

python setup.py sdist
twine upload dist/*

На веб-сайте pypi загруженный пакет ДОЛЖЕН включать файл txt, он просто не включен в pip install.

Этот процесс до сих пор был крайне неприятным, и Stackoverflow и другие сайты не дают однозначного ответа.Я попробовал оба подхода директивы MANIFEST.in и setup.py, в каждой комбинации.Это все еще не работает.Документы на Python слишком сложны и неясны для меня.

Ответы [ 3 ]

2 голосов
/ 20 июня 2019

include_package_data является частью setuptools дистрибутива, а не distutils Попробуйте что-то вроде следующего

  from setuptools import setup, find_packages

  setup(name="",
        version="0.1.0",
        packages=find_packages(),
        include_package_data=True,
        setup_requires=["pytest-runner"],
        tests_require=["pytest",
                       "mock"],
        test_suite="pytest",
        install_requires=[],
        entry_points={"console_scripts": []})
1 голос
/ 20 июня 2019

Решение представляет собой комбинацию ответов @ m.rp и @ vin:

Вместо from distutils.core import setup используйте

from setuptools import setup

, включив следующий аргумент в вызов setup ()

include_package_data=True,

и ТОЛЬКО используйте файл MANIFEST.in для включения файлов, где каталог указан относительно места, где находится файл MANIFEST.in.

recursive-include gimpscm *.txt

Какой это масштабный PITAбыло.Спасибо за ответ!

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

Вы используете как MANIFEST.in, так и package_data, многие источники препятствуют этому использованию, поскольку вы предоставляете два источника истины, которые могут легко противоречить друг другу.

Используйте только MANIFEST.in и include_package_data = True

Дополнительные источники: https://blog.ionelmc.ro/presentations/packaging/#slide:15

...