簡體   English   中英

在python包中包含非python文件

[英]Including non-python files in a python package

我創建並發布了一個Python包,但是我無法讓它包含文本文件。

這是存儲庫: https : //github.com/void4/gimpscm

我需要包含的文件是procdump.txt,位於gimpscm目錄中。

所以布局是這樣的:

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

我試過了:

  • 在setup.py中包含package_data指令
  • 各種MANIFEST.in指令

當前的setup.py包括:

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

MANIFEST.in包含:

recursive-include gimpscm *.txt

像.py文件一樣,txt文件也包含在dist目錄的zip的gimpscm子目錄中。 但是當我pip install gimpscm ,根本沒有安裝該文件。

我以這種方式發布軟件包:

python setup.py sdist
twine upload dist/*

在pypi網站上,上傳的軟件包中確實包含txt文件,而pip install卻沒有包含該文件。

到目前為止,此過程非常令人沮喪,並且Stackoverflow和其他站點沒有給出明確的答案。 我已經嘗試了MANIFEST.in和setup.py指令方法的每種組合。 它仍然不起作用。 Python文檔也太復雜了,我不清楚。

include_package_datasetuptools發行版的一部分,而不是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": []})

您同時使用MANIFEST.in和package_data,因為您提供了兩個很容易彼此矛盾的事實來源,所以許多資料都不利於這種用法。

僅使用MANIFEST.in和include_package_data = True

其他來源: https//blog.ionelmc.ro/presentations/packaging/#slide:15

解決方案是@ 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。 謝謝您的回答!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM