Domanda

Ho avuto problemi con ottenere setup.py per fare correttamente sdist . L'ho ridotto a questo. Ho la seguente struttura di directory:

my_package\
    my_subpackage\
        __init__.py
        deep_module.py
    __init__.py
    module.py
    setup.py

Ed ecco cosa ho in setup.py :

#!/usr/bin/env python

from distutils.core import setup
import distutils

setup(
    name='a',
    version='0.1',
    description='a',
    author='a',
    author_email='a@a.com',
    url='http://a.org',
    packages=['my_package','my_package.my_subpackage'],
    package_dir={'': '..'},
    license= "a",
    long_description = 'aaa',

)

(Le cose 'aaa' sono solo segnaposto.)

Comunque, funziona bene quando faccio setup.py install , ma quando provo a fare setup.py sdist , accadono alcune cose curiose:

  1. Viene creato un file MANIFEST .

  2. Viene creata una copia della cartella my_package dentro la cartella my_package esistente (anche se manca alcune delle impostazioni- file correlati credo.)

  3. Viene creata una cartella dist , al suo interno un file zip, all'interno di quella cartella con il nome del pacchetto, ma all'interno di quella cartella non c'è l'intero pacchetto come speravo, ma solo due file, setup.py e PKG-INFO.

Cosa sto facendo di sbagliato? Come faccio a far funzionare sdist ?

È stato utile?

Soluzione

Invece di questo:

my_package\
    my_subpackage\
        __init__.py
        deep_module.py
    __init__.py
    module.py
    setup.py

Prova questo:

my_package_source\
    setup.py
    README.txt
    my_package\
        my_subpackage\
            __init__.py
            deep_module.py
        __init__.py
        module.py

In realtà non hai bisogno di un file README, è solo a scopo illustrativo per quale tipo di cose si trovano nella directory principale della cartella del tuo progetto.

=== EDIT ======================================

Dovrei elaborare. Dopo averlo eseguito, la tua directory dovrebbe assomigliare a questa:

my_package_source\
    setup.py
    README.txt
    MANIFEST
    PKG-INFO
    dist\
        my_package_0.X.tar.gz (or .zip on windows I believe)
    my_package\
        my_subpackage\
            __init__.py
            deep_module.py
        __init__.py
        module.py

Usa il pacchetto nella directory dist per distribuire.

Altri suggerimenti

Il problema è ben spiegato qui :

  

Setuptools ha molti errori silenziosi   modalità. Uno di questi è il fallimento   include tutti i file nella versione sdist   (beh, non esattamente un fallimento, potresti   RTFM, ma il comportamento predefinito è   inaspettato). Questo post servirà come a   google-stesso-risposta per questo   problema, finché non diventiamo nuovi, più brillanti,   Distribuire risolvendo tutti i nostri   problemi.

Come sottolineano i commenti, il bug (errore di progettazione) è in realtà in distutils - setuptools non riesce a risolverlo (se stai usando svn, le cose sono in realtà un po 'migliori).

Posso riprodurre il tuo problema mentre lo osservi, ovvero accorciando un po 'i nomi dei file, ho:

$ ls -lR
total 8
-rw-r--r--  1 aleax  eng    0 Oct 24 11:25 __init__.py
-rw-r--r--  1 aleax  eng    0 Oct 24 11:25 modu.py
drwxr-xr-x  4 aleax  eng  136 Oct 24 11:25 mysub
-rw-r--r--  1 aleax  eng  323 Oct 24 11:26 setup.py

./mysub:
total 0
-rw-r--r--  1 aleax  eng  0 Oct 24 11:25 __init__.py
-rw-r--r--  1 aleax  eng  0 Oct 24 11:25 deepmod.py

ed eseguendo python setup.py sdist produce (così come avvertimenti):

$ ls -lR
total 16
-rw-r--r--  1 aleax  eng  104 Oct 24 11:35 MANIFEST
-rw-r--r--  2 aleax  eng    0 Oct 24 11:25 __init__.py
drwxr-xr-x  3 aleax  eng  102 Oct 24 11:35 dist
-rw-r--r--  2 aleax  eng    0 Oct 24 11:25 modu.py
drwxr-xr-x  5 aleax  eng  170 Oct 24 11:35 mypack
drwxr-xr-x  4 aleax  eng  136 Oct 24 11:25 mysub
-rw-r--r--  1 aleax  eng  323 Oct 24 11:26 setup.py

./dist:
total 8
-rw-r--r--  1 aleax  eng  483 Oct 24 11:35 a-0.1.tar.gz

./mypack:
total 0
-rw-r--r--  2 aleax  eng    0 Oct 24 11:25 __init__.py
-rw-r--r--  2 aleax  eng    0 Oct 24 11:25 modu.py
drwxr-xr-x  4 aleax  eng  136 Oct 24 11:35 mysub

./mypack/mysub:
total 0
-rw-r--r--  2 aleax  eng  0 Oct 24 11:25 __init__.py
-rw-r--r--  2 aleax  eng  0 Oct 24 11:25 deepmod.py

./mysub:
total 0
-rw-r--r--  2 aleax  eng  0 Oct 24 11:25 __init__.py
-rw-r--r--  2 aleax  eng  0 Oct 24 11:25 deepmod.py

Una soluzione è quella di cambiare il layout della directory come segue (dalla dir corrente del mypack):

$ mkdir mypack
$ mv __init__.py modu.py mysub/ mypack
$ touch README.txt

quindi ottenendo:

$ ls -lR
total 8
-rw-r--r--  1 aleax  eng    0 Oct 24 11:37 README.txt
drwxr-xr-x  5 aleax  eng  170 Oct 24 11:37 mypack
-rw-r--r--  1 aleax  eng  323 Oct 24 11:26 setup.py

./mypack:
total 0
-rw-r--r--  1 aleax  eng    0 Oct 24 11:25 __init__.py
-rw-r--r--  1 aleax  eng    0 Oct 24 11:25 modu.py
drwxr-xr-x  4 aleax  eng  136 Oct 24 11:25 mysub

./mypack/mysub:
total 0
-rw-r--r--  1 aleax  eng  0 Oct 24 11:25 __init__.py
-rw-r--r--  1 aleax  eng  0 Oct 24 11:25 deepmod.py

(e sbarazzarsi di uno degli avvertimenti, quello di README - quello di perdere MANIFEST.in rimane chiaramente ;-). Cambia anche una riga di setup.py in:

package_dir={'': '.'},

Ora, dopo python setup.py sdist , ottieni un tarball decente:

$ tar tvf dist/a-0.1.tar.gz 
drwxr-xr-x aleax/eng         0 2009-10-24 11:40:05 a-0.1/
drwxr-xr-x aleax/eng         0 2009-10-24 11:40:05 a-0.1/mypack/
-rw-r--r-- aleax/eng         0 2009-10-24 11:25:30 a-0.1/mypack/__init__.py
-rw-r--r-- aleax/eng         0 2009-10-24 11:25:30 a-0.1/mypack/modu.py
drwxr-xr-x aleax/eng         0 2009-10-24 11:40:05 a-0.1/mypack/mysub/
-rw-r--r-- aleax/eng         0 2009-10-24 11:25:30 a-0.1/mypack/mysub/__init__.py
-rw-r--r-- aleax/eng         0 2009-10-24 11:25:30 a-0.1/mypack/mysub/deepmod.py
-rw-r--r-- aleax/eng       156 2009-10-24 11:40:05 a-0.1/PKG-INFO
-rw-r--r-- aleax/eng         0 2009-10-24 11:37:41 a-0.1/README.txt
-rw-r--r-- aleax/eng       322 2009-10-24 11:39:46 a-0.1/setup.py

ovviamente il file MANIFEST è ancora creato nella tua directory attuale, ma spero che non sia un problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top