[Python] setup bdist ==> error: can't copy 'ANIFEST.in': doesn't exist or not a regular file

Daniele Tricoli eriol a mornie.org
Dom 16 Feb 2014 10:05:24 CET


Ciao Piergiuliano,

On Friday 14 February 2014 16:47:35 Piergiuliano Bossi wrote:
> Mi sto spaccando le corna su una cosa che immagino essere stupida e banale
> e mi fara' sentire piccolo e misero di fronte all'universo.

No dai, può capitare a tutti! Il bello di liste come questa è appunto poter 
discutere con altri che hanno la stessa tua passione anche su cose 
apparentemente incomprensibili come questa! :)

[CUT output of $ python setup.py bdist]
> error: can't copy 'ANIFEST.in': doesn't exist or not a regular file
> 
> Inoltre, se uno prova a installare il sorgente (attualmente pubblicato) con
> pip install ottiene lo stesso errore.

Premesso che non ho indagato a fondo anche perché in genere cerco di evitare 
setuptools, quindi non ti so dire perché MANIFEST.in diventi ANIFEST.in però 
ho notato una cosa.

Nel tuo setup.py scrivi:

    [...]
    packages=['simpyple'],
    [...]

Cioè stai dicendo che esisterà simpyple/__init__.py, ma il layout del tuo 
progetto è diverso in quanto il tuo package è nella stessa directory di 
setup.py, per cui al posto di package_dir={'simpyple': ''}, in effetti 
dovresti dare package_dir={'simpyple': '.'},

Infatti con (non ti mando una PR, ma ti incollo qui la diff):

eriol a mornie:~/tmp/simpyple$ git diff
diff --git a/setup.py b/setup.py
index aa31bb7..9faddff 100644
--- a/setup.py
+++ b/setup.py
@@ -45,7 +45,7 @@ setup(
     author_email='',
     url='https://github.com/thinkingbox/simpyple',
     license='',
-    package_dir={'simpyple': ''},
+    package_dir={'simpyple': '.'},
     packages=['simpyple'],
     include_package_data=True,
     zip_safe=False,

eriol a mornie:~/tmp/simpyple$ python setup.py bdist
running bdist
running bdist_dumb
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/simpyple
copying ./schedule.py -> build/lib.linux-x86_64-2.7/simpyple
copying ./__init__.py -> build/lib.linux-x86_64-2.7/simpyple
running egg_info
creating simpyple.egg-info
writing requirements to simpyple.egg-info/requires.txt
writing simpyple.egg-info/PKG-INFO
writing top-level names to simpyple.egg-info/top_level.txt
writing dependency_links to simpyple.egg-info/dependency_links.txt
writing manifest file 'simpyple.egg-info/SOURCES.txt'
reading manifest file 'simpyple.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'simpyple.egg-info/SOURCES.txt'
installing to build/bdist.linux-x86_64/dumb
running install
running install_lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/dumb
creating build/bdist.linux-x86_64/dumb/usr
creating build/bdist.linux-x86_64/dumb/usr/local
creating build/bdist.linux-x86_64/dumb/usr/local/lib
creating build/bdist.linux-x86_64/dumb/usr/local/lib/python2.7
creating build/bdist.linux-x86_64/dumb/usr/local/lib/python2.7/dist-packages
creating build/bdist.linux-x86_64/dumb/usr/local/lib/python2.7/dist-
packages/simpyple
copying build/lib.linux-x86_64-2.7/simpyple/schedule.py -> build/bdist.linux-
x86_64/dumb/usr/local/lib/python2.7/dist-packages/simpyple
copying build/lib.linux-x86_64-2.7/simpyple/__init__.py -> build/bdist.linux-
x86_64/dumb/usr/local/lib/python2.7/dist-packages/simpyple
byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python2.7/dist-
packages/simpyple/schedule.py to schedule.pyc
byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python2.7/dist-
packages/simpyple/__init__.py to __init__.pyc
running install_egg_info
Copying simpyple.egg-info to build/bdist.linux-
x86_64/dumb/usr/local/lib/python2.7/dist-packages/simpyple-0.1.2.egg-info
running install_scripts
creating /home/eriol/tmp/simpyple/dist
Creating tar archive
removing 'build/bdist.linux-x86_64/dumb' (and everything under it)

(Scusa il wordwrap, ma il log penso renda l'idea).

Trovi informazioni dettagliate sulla cosa qui:
http://docs.python.org/2/distutils/setupscript.html

Forse ti conviene utilizzare un layout più convenzionale sia per evitare 
sorprese del genere, ma anche per seguire il POLA, in effetti pure non ho 
notato a colpo d'occhio che il package si trovava allo stesso livello di 
setup.py.
È vero, avere il repository col path del package

    simpyple/simpyple/__init__.py
    ...
    setup.py

può non sembrare il massimo, ed anche a me ogni tanto viene da pensarci, ma 
poi mi dico che non vale la pena complicarsi la vita.

Ah, magari vuoi impostare il tuo editor in modo che rimuova i trailing space: 
ci sono un paio di righe nel setup.py che contengono solo uno spazio... per 
fortuna nel mio vimrc non uso uso l'impostazione "mostrami le lacrime di 
sangue al posto dei trailing space" come usa(va) fare Marco Beri! ;-)

HTH,

-- 
 Daniele Tricoli 'Eriol'
 http://mornie.org


Maggiori informazioni sulla lista Python