स्थैतिक फाइल को सेटप्टूल - पाइथन पैकेज में कैसे शामिल करें


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.txtना Potato/potatoData.txt...

मैं क्या खो रहा हूँ?!

जवाबों:


126

जैसा कि टिप्पणियों में बताया गया है, स्थैतिक फ़ाइलों को जोड़ने के 2 तरीके हैं:

1 - शामिल_पंजी_दाता = सच्चा + मैनिफ़ेस्ट.इन

MANIFEST.inउसी निर्देशिका में एक फ़ाइल setup.pyइस तरह दिखती है:

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

के साथ include_package_data = Trueमें setup.py

2 - setup_data setup.py में

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

अंदर फ़ाइलों को निर्दिष्ट करें setup.py


दोनों का प्रयोग न करें include_package_dataऔर package_dataमें setup.py

include_package_datapackage_dataजानकारी को शून्य कर देगा ।

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


3
काम करता है! जाहिरा तौर पर, MANIFEST.in यह बताता है कि कौन सी फाइलें शामिल हैं, जिसमें सेटअपहोम / डिस्टुटिल के अलावा कौन सी स्मार्ट शामिल है, जो डिफ़ॉल्ट रूप से शामिल है।
chbrown

13
इस प्लस को करने से include_package_data = Trueऊपर काम करने वाले मुझे जोड़ते हैं । दोनों को किया जाना था: मैनिफ़ेस्ट फ़ाइल और setup.py निर्देश।
djhaskin987

मैं सिर्फ ".txt" शामिल करता हूं। महान thnx पर काम करता है
प्रियेश

7
यह ध्यान दिया जाना चाहिए कि जब भी आप निर्दिष्ट करते हैं include_package_data=True, तो आप मूल रूप से इसके प्रभाव को कम कर देते हैं package_data, और इसीलिए सेटपूल आप से अपेक्षा करते हैं कि आप इसमें फाइलों को शामिल करें MANIFEST.in। उनमें से एक ( package_dataबनाम include_package_data=True+ MANIFEST.in) का उपयोग करें , दोनों का नहीं।
konoufo

क्या रनटाइम के दौरान स्थिर निर्देशिका को लिखना संभव है?
बालों वाले

28

सभी फ़ाइलों को पुनरावर्ती रूप से शामिल करें:

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

जहाँ project_nameआपके पास setup.pyफ़ाइल है उसी पंक्ति में एक फ़ोल्डर है ।


1
आप इसके साथ एक एकल फ़ाइल भी शामिल करना चाह सकते हैं: include funniest/data.jsonउदाहरण के लिए
रॉड्रिगो डायस

11

डॉक्स के अनुसार, पैकेज डेटा फ़ाइलों को शामिल करने के तीन तरीके हैं। आपके पास दो पैकेज हैं: आलू और टमाटर। स्थिर निर्देशिका उन पैकेजों में से किसी में भी नहीं है, यही वजह है कि setup.py में आपका package_data शब्दकोश काम नहीं कर रहा था। चयन विकल्प के लिए आवश्यक है कि setup_package_data setup.py में सही पर सेट हो। गैर-पैकेज डेटा फ़ाइलों तक पहुंचने का तरीका यहां पाया जा सकता है ।



1

यहाँ डाल के रूप में यह टिप्पणी में खो दिया था के रूप में यहाँ वर्णित है।

स्थैतिक फाइल को सेटप्टूल - पाइथन पैकेज में कैसे शामिल करें

मुख्य मुद्दा यह है कि आपके पास package_data और दोनों नहीं हो सकते include_package_data = True

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.