Jak dołączyć dane pakietu do setuptools / distribute?
Podczas korzystania z setuptools / distribute, nie mogę zmusić instalatora do wciągnięcia żadnego package_data
Pliki. Wszystko, co przeczytałem, mówi, że poniższy sposób jest prawidłowy. Czy ktoś może doradzić?
setup(
name='myapp',
packages=find_packages(),
package_data={
'myapp': ['data/*.txt'],
},
include_package_data=True,
zip_safe=False,
install_requires=['distribute'],
)
Gdzie myapp/data/
jest lokalizacją plików danych.
7 answers
Zdaję sobie sprawę, że to stare pytanie...ale dla ludzi, którzy znaleźli drogę tutaj przez Google: package_data
jest niskim, brudne kłamstwo . Jest on używany tylko podczas budowania binarnych pakietów (python setup.py bdist ...
), ale nie podczas budowania pakietów źródłowych (python setup.py sdist ...
). Jest to oczywiście niedorzeczne-można by się spodziewać, że zbudowanie dystrybucji źródłowej skutkowałoby zbiorem plików, które mogłyby zostać wysłane do kogoś innego w celu zbudowania dystrybucji binarnej.
W każdym przypadku, za pomocą MANIFEST.in
będzie działać zarówno dla dystrybucji binarnych, jak i źródłowych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-30 14:26:09
Właśnie miałem ten sam problem. Rozwiązaniem było po prostu usunięcie include_package_data=True
.
Po przeczytaniu tutaj , zdałem sobie sprawę, że include_package_data
ma na celu dołączanie plików z kontroli wersji, w przeciwieństwie do "dołączania danych pakietu", jak sama nazwa wskazuje. Z docs:
Pliki danych [z include_package_data] muszą znajdować się pod kontrolą CVS lub Subversion
...
Jeśli chcesz mieć dokładniejszą kontrolę nad tym, jakie pliki są dołączane (na przykład, jeśli ty mieć pliki dokumentacji w katalogach pakietów i chcesz wykluczyć ich z instalacji), wtedy można również użyć słowa kluczowego
package_data
.
Usunięcie tego argumentu naprawiło to, co jest przypadkiem, dlaczego działało również po przełączeniu na distutils, ponieważ nie bierze tego argumentu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-09 01:50:37
Zgodnie z zaleceniem @ Joe, aby usunąć include_package_data=True
wiersz również zadziałał dla mnie.
Aby rozwinąć trochę więcej, mam Nie MANIFEST.in
Plik. Używam Git a nie CVS.
Repozytorium przyjmuje taki kształt:
/myrepo
- .git/
- setup.py
- myproject
- __init__.py
- some_mod
- __init__.py
- animals.py
- rocks.py
- config
- __init__.py
- settings.py
- other_settings.special
- cool.huh
- other_settings.xml
- words
- __init__.py
word_set.txt
setup.py
:
from setuptools import setup, find_packages
import os.path
setup (
name='myproject',
version = "4.19",
packages = find_packages(),
# package_dir={'mypkg': 'src/mypkg'}, # didnt use this.
package_data = {
# If any package contains *.txt or *.rst files, include them:
'': ['*.txt', '*.xml', '*.special', '*.huh'],
},
#
# Oddly enough, include_package_data=True prevented package_data from working.
# include_package_data=True, # Commented out.
data_files=[
# ('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
('/opt/local/myproject/etc', ['myproject/config/settings.py', 'myproject/config/other_settings.special']),
('/opt/local/myproject/etc', [os.path.join('myproject/config', 'cool.huh')]),
#
('/opt/local/myproject/etc', [os.path.join('myproject/config', 'other_settings.xml')]),
('/opt/local/myproject/data', [os.path.join('myproject/words', 'word_set.txt')]),
],
install_requires=[ 'jsonschema',
'logging', ],
entry_points = {
'console_scripts': [
# Blah...
], },
)
Uruchamiam python setup.py sdist
dla źródłowego distrib (nie próbowałem binarnego).
A gdy w zupełnie nowym środowisku wirtualnym mam myproject-4.19.tar.gz
, Plik,
i używam
(venv) pip install ~/myproject-4.19.tar.gz
...
I inne niż wszystko, co zostanie zainstalowane do mojego środowiska wirtualnego site-packages
, te specjalne pliki danych są instalowane do /opt/local/myproject/data
i /opt/local/myproject/etc
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-29 14:59:02
include_package_data=True
dla mnie zadziałało.
Jeśli używasz Gita, pamiętaj o dodaniu setuptools-git
do install_requires
. O wiele mniej nudne niż posiadanie Manifest
lub włączenie wszystkich ścieżek w package_data
(w moim przypadku jest to aplikacja django ze wszystkimi rodzajami statyki)
( wklejony komentarz zrobiłem, jak k3-RNC wspomniałem, że faktycznie jest pomocny jak jest)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:51
Update: Ta odpowiedź jest stara i informacje nie są już ważne. Wszystkie setup.py configs powinien używać import setuptools
. Dodałem pełniejszą odpowiedź na https://stackoverflow.com/a/49501350/64313
Rozwiązałem to, przełączając się na distutils. Wygląda na to, że dystrybucja jest przestarzała i / lub zepsuta.
from distutils.core import setup
setup(
name='myapp',
packages=['myapp'],
package_data={
'myapp': ['data/*.txt'],
},
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 20:27:42
Starożytne pytanie i jeszcze... Zarządzanie pakietami w Pythonie naprawdę pozostawia wiele do życzenia. Miałem więc przypadek użycia instalacji przy użyciu PIP lokalnie do określonego katalogu i byłem zaskoczony, że obie ścieżki package_data i data_files nie działają. Nie chciało mi się dodawać kolejnego pliku do repo, więc skończyło się na wykorzystaniu data_files i setup.py option --install-data; coś takiego
pip install . --install-option="--install-data=$PWD/package" -t package
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-09 23:07:23
Przeniesienie folderu zawierającego dane pakietu do folderu modułu rozwiązało problem.
Zobacz to pytanie: MANIFEST.in ignored on "python setup.py install" - brak zainstalowanych plików danych?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37