setuptools에 정적 파일을 포함하는 방법-Python 패키지


83

나는 포함 할 ./static/data.txt에를 setuptools, 여기에 내 코드입니다 :

# setup.py
import os,glob
from setuptools import setup,find_packages

setup(
    name = "PotatoProject",
    version = "0.1.1",
    author = "Master Splinter",
    author_email = "splinter@initech.com",
    description = ("The potatoproject!"),
    url = 'http://www.google.com',
    license = "BSD",

    # adding packages
    packages=find_packages('src'),
    package_dir = {'':'src'},

    # trying to add files...
    include_package_data = True,
    package_data = {
        '': ['*.txt'],
        '': ['static/*.txt'],
        'static': ['*.txt'],
    },

    scripts=['src/startPotato'],
    classifiers=[
        "Development Status :: 3 - Alpha",
        "Topic :: Utilities",
        "License :: OSI Approved :: BSD License",
    ],
)

파일 시스템 :

.
├── setup.py
└── src
    ├── distutils_setup.py
    ├── Potato
    │   ├── __init__.py
    │   ├── potatoData.txt
    │   └── printer.py
    ├── startPotato
    ├── static
    │   └── data.txt
    └── Tomato
        ├── big.py
        └── __init__.py

실행시 출력 : python setup.py sdist

running sdist
running egg_info
creating src/PotatoProject.egg-info
writing src/PotatoProject.egg-info/PKG-INFO
writing top-level names to src/PotatoProject.egg-info/top_level.txt
writing dependency_links to src/PotatoProject.egg-info/dependency_links.txt
writing manifest file 'src/PotatoProject.egg-info/SOURCES.txt'
reading manifest file 'src/PotatoProject.egg-info/SOURCES.txt'
writing manifest file 'src/PotatoProject.egg-info/SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.txt

creating PotatoProject-0.1.1
creating PotatoProject-0.1.1/src
creating PotatoProject-0.1.1/src/Potato
creating PotatoProject-0.1.1/src/PotatoProject.egg-info
creating PotatoProject-0.1.1/src/Tomato
making hard links in PotatoProject-0.1.1...
hard linking setup.py -> PotatoProject-0.1.1
hard linking src/startPotato -> PotatoProject-0.1.1/src
hard linking src/Potato/__init__.py -> PotatoProject-0.1.1/src/Potato
hard linking src/Potato/printer.py -> PotatoProject-0.1.1/src/Potato
hard linking src/PotatoProject.egg-info/PKG-INFO -> PotatoProject-0.1.1/src/PotatoProject.egg-info
hard linking src/PotatoProject.egg-info/SOURCES.txt -> PotatoProject-0.1.1/src/PotatoProject.egg-info
hard linking src/PotatoProject.egg-info/dependency_links.txt -> PotatoProject-0.1.1/src/PotatoProject.egg-info
hard linking src/PotatoProject.egg-info/top_level.txt -> PotatoProject-0.1.1/src/PotatoProject.egg-info
hard linking src/Tomato/__init__.py -> PotatoProject-0.1.1/src/Tomato
hard linking src/Tomato/big.py -> PotatoProject-0.1.1/src/Tomato
Writing PotatoProject-0.1.1/setup.cfg
creating dist
Creating tar archive
removing 'PotatoProject-0.1.1' (and everything under it)

그리고 txt가 추가되지 않았습니다! 아니 static/data.txtPotato/potatoData.txt...

내가 뭘 놓치고 있니?!

답변:


126

주석에서 지적했듯이 정적 파일을 추가하는 방법에는 두 가지가 있습니다.

1-include_package_data = True + MANIFEST.in

MANIFEST.in동일한 디렉토리에 있는 파일은 setup.py다음과 같습니다.

include src/static/*
include src/Potato/*.txt

include_package_data = True에서 setup.py.

2-setup.py의 package_data

package_data = {
    'static': ['*'],
    'Potato': ['*.txt']
}

내부 파일을 지정합니다 setup.py.


include_package_datapackage_data에서 모두 사용하지 마십시오 setup.py.

include_package_datapackage_data정보 를 무효화합니다 .

https://setuptools.readthedocs.io/en/latest/setuptools.html#include-data-files


3
공장! 분명히 MANIFEST.in 은 setup.py / distutils가 기본적으로 포함하기에 충분히 스마트 한 것 외에도 포함 할 파일을 선택합니다 .
chbrown

13
이 플러스 include_package_data = True위의 추가는 나를 위해 일했습니다. 둘 다 완료되어야했습니다 : 매니페스트 파일과 setup.py 지시문.
djhaskin987 2015 년

"include * .txt"만 추가합니다. 훌륭한 thnx 작품
Priyeshj

7
을 지정할 때마다 include_package_data=True기본적으로의 효과를 무효화하므로 package_datasetuptools에서 MANIFEST.in. 둘 다가 아닌 둘 중 하나 ( package_datavs include_package_data=True+ MANIFEST.in)를 사용하십시오 .
konoufo

런타임 중에 정적 디렉토리에 쓸 수 있습니까?
Hairy

28

모든 파일을 재귀 적으로 포함 :

recursive-include project_name/templates *
recursive-include project_name/static *

여기서 project_name당신은 같은 줄에 폴더 setup.py파일.


1
다음과 같은 단일 파일을 포함 할 수도 있습니다. include funniest/data.json
Rodrigo Dias

11

문서에 따르면 패키지 데이터 파일을 포함 하는 세 가지 방법 이 있습니다. 두 가지 패키지가 있습니다 : 감자와 토마토. 정적 디렉토리가 이러한 패키지 중 하나에 없기 때문에 setup.py의 package_data 사전이 작동하지 않았습니다. 매니페스트 옵션을 사용하려면 setup.py에서 include_package_data를 True로 설정해야합니다. 패키지가 아닌 데이터 파일에 액세스하는 방법은 여기 에서 찾을 수 있습니다 .



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.