MANIFEST.in ignored on "python setup.py install" - brak zainstalowanych plików danych?
Oto mój rozebrany setup.py script with non-code stuff removed:
#!/usr/bin/env python
from distutils.core import setup
from whyteboard.misc import meta
setup(
name = 'Whyteboard',
version = meta.version,
packages = ['whyteboard', 'whyteboard.gui', 'whyteboard.lib', 'whyteboard.lib.pubsub',
'whyteboard.lib.pubsub.core', 'whyteboard.lib.pubsub.utils', 'whyteboard.misc'],
py_modules = ['whyteboard'],
scripts = ['whyteboard.py'],
)
MANIFEST.in:
include *.txt
include whyteboard-help/*.*
recursive-include locale *.mo
recursive-include images *.png
When I run "python setup.py zainstaluj sdist" dostaję ładny .smoła.gz z głównym folderem "whyteboard-0.41" , z folderami my locale / images / I whyteboard-help / wewnątrz. To ma również mój whyteboard.py skrypt uruchamiający mój program z pakietu źródłowego whyteboard.
Więc:
whyteboard/
├── locale/
├── images
├── whyteboard-help/
├── whyteboard/
│ ├── __init__.py
│ └── other packages etc
├── whyteboard.py
├── README
├── setup.py
└── CHANGELOG
To odzwierciedla źródło mojego programu, tak wszystko powinno być, i jest poprawna.
Jednak gdy uruchamiam "python setup.py zainstalować" żaden z moich plików danych nie jest zapisywany - tylko pakiet źródłowy "whyteboard", a whyteboard.py jest umieszczony w /usr / local/lib/python2.6/dist-packages/.
Idealnie, chciałbym taką samą strukturę katalogów jak to, co zostało wygenerowane w .smoła.plik gz ma być utworzony w dist-packages, ponieważ tak mój program spodziewa się szukać swoich zasobów.
Jak mogę uzyskać "install", aby utworzyć tę strukturę katalogów? Wydaje się ignorować mój manifest, z tego co wiem.
5 answers
Kilka uwag oprócz odpowiedzi Neda (która uderza w główny problem):
Distutils nie instaluje pakietów i modułów Pythona w podkatalogu per-project w site-packages
(LUB dist-packages
na Debianie/Ubuntu): są one instalowane bezpośrednio w site-packages
, jak już widzieliście. Tak więc katalog zawierający whyteboard-xx
w Twojej sdist nie będzie istniał w ostatecznej, zainstalowanej formie.
Jedną z sugestii jest to, że powinieneś być ostrożny, aby nazwać swój data_files
w sposób, który wyjaśnia, jaki projekt należą do nich, ponieważ te pliki / katalogi są instalowane bezpośrednio w globalnym katalogu site-packages
, a nie wewnątrz jakiegokolwiek katalogu zawierającego whyteboard
.
Lub możesz zamiast tego utworzyć swoje dane package_data
z whyteboard
pakietu (co oznacza, że musi on mieszkać wewnątrz tego pakietu, tzn. obok __init__.py
), a wtedy to nie jest problem.
Wreszcie, nie ma sensu mieć zarówno whyteboard.py
moduł w py_modules
, jak i whyteboard/__init__.py
pakiet w packages
. Te dwa wzajemnie się wykluczają, a jeśli masz oba, moduł whyteboard.py
będzie ignorowany przez import na rzecz pakietu o tej samej nazwie.
Jeśli whyteboard.py
jest tylko skryptem i nie jest przeznaczony do importowania, powinieneś użyć dla niego opcjiscripts i usunąć go z py_modules
.
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
2015-11-30 20:57:25
MANIFEST.in
informuje Distutils, jakie pliki mają być zawarte w dystrybucji źródłowej, ale nie ma to bezpośredniego wpływu na to, jakie pliki są zainstalowane. W tym celu należy dołączyć odpowiednie pliki do pliku setup.py
, zazwyczaj jako Dane pakietu lub jako dodatkowe pliki.
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
2010-08-30 01:09:13
Nie mogłem zrozumieć, dlaczego mój plik MANIFEST.in
był ignorowany, gdy uruchomiłem python setup.py install
- okazuje się, że include_package_data=True
rozwiązuje problem. Opcja package_data
nie jest w rzeczywistości wymagana.
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
2015-05-27 22:34:31
Uruchamiając Pythona 2.6.1 na Mac OSX, nie miałem absolutnie żadnego szczęścia poza użyciem parametru data_files w setup.py. wszystko z MANIFEST.in po prostu powodowało, że pliki były dołączane do pakietu dist, ale nigdy nie były instalowane. Sprawdziłem inne pakiety i rzeczywiście używały data_files do określania dodatkowych plików.
Stworzyłem krótką funkcję, która pomaga wyliczyć wszystkie pliki z drzewa katalogów w
(target_dir, [Lista plików]) format, który data_files:
def gen_data_files(*dirs):
results = []
for src_dir in dirs:
for root,dirs,files in os.walk(src_dir):
results.append((root, map(lambda f:root + "/" + f, files)))
return results
Teraz mogę po prostu wywołać to w moim wywołaniu konfiguracji:
setup(... data_files = gen_data_files("docs", "lib") ...
I wszystko w tych drzewach zostanie zainstalowane.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
2011-09-02 19:30:31
Powinieneś użyć setuptools:
#!/usr/bin/env python
from setuptools import setup, find_packages
from whyteboard.misc import meta
setup(
name = 'Whyteboard',
version = meta.version,
packages = find_packages(),
include_package_data=True,
py_modules = ['whyteboard'],
scripts = ['whyteboard.py'],
)
W rzeczywistości nie jest to użycie pliku manifestu do wykonania zadania, ale zawiera wszystkie potrzebne pliki.
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-03-07 07:14:16