2013-02-14 9 views
14

Questo è il mio file di setup.pymodulo Python non verrà installato

#!/usr/bin/env python 

from setuptools import setup 
from sys import path 

setup(name= 'conundrum', 
    version= '0.1.0', 
    author= 'elssar', 
    author_email= '[email protected]', 
    py_modules= ['conundrum'], 
    url= 'https://github.com/elssar/conundrum', 
    license= 'MIT', 
    description= 'A framework agnostic blog generator.', 
    long_description= open(path[0]+'/README.md', 'r').read(), 
    install_requires= [ 
     'PyYAML >= 3.0.9', 
     'Markdown >= 2.2.0', 
     'requests >= 1.0.4', 
     ], 
) 

Ho provato utilizzando sia setuptools e distutils, ma questo non viene installato il mio modulo. Invece ho

file module.py (for module module) not found 

Questa è la mia struttura di directory

/module 
|--/test 
|--README.md 
|--license.txt 
|--module.py 
|--setup.py 

Giusto per essere chiari, il modulo è la directory principale.

Qualcuno può dirmi cosa sto facendo male?

Questa è l'uscita quando provo ad installare

[email protected]:/usr/local/src/conundrum$ sudo python /home/elssar/code/conundrum/setup.py install 
/usr/lib/python2.6/distutils/dist.py:250: UserWarning: 'licence' distribution option is deprecated; use 'license' 
    warnings.warn(msg) 
running install 
running bdist_egg 
running egg_info 
writing requirements to conundrum.egg-info/requires.txt 
writing conundrum.egg-info/PKG-INFO 
writing top-level names to conundrum.egg-info/top_level.txt 
writing dependency_links to conundrum.egg-info/dependency_links.txt 
warning: manifest_maker: standard file 'setup.py' not found 
file conundrum.py (for module conundrum) not found 
reading manifest file 'conundrum.egg-info/SOURCES.txt' 
writing manifest file 'conundrum.egg-info/SOURCES.txt' 
installing library code to build/bdist.linux-x86_64/egg 
running install_lib 
running build_py 
file conundrum.py (for module conundrum) not found 
file conundrum.py (for module conundrum) not found 
warning: install_lib: 'build/lib.linux-x86_64-2.6' does not exist -- no Python modules to install 
creating build/bdist.linux-x86_64/egg 
creating build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO 
copying conundrum.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO 
zip_safe flag not set; analyzing archive contents... 
creating 'dist/conundrum-0.1.0-py2.6.egg' and adding 'build/bdist.linux-x86_64/egg' to it 
removing 'build/bdist.linux-x86_64/egg' (and everything under it) 
Processing conundrum-0.1.0-py2.6.egg 
removing '/usr/local/lib/python2.6/dist-packages/conundrum-0.1.0-py2.6.egg' (and everything under it) 
creating /usr/local/lib/python2.6/dist-packages/conundrum-0.1.0-py2.6.egg 
Extracting conundrum-0.1.0-py2.6.egg to /usr/local/lib/python2.6/dist-packages 
conundrum 0.1.0 is already the active version in easy-install.pth 

Installed /usr/local/lib/python2.6/dist-packages/conundrum-0.1.0-py2.6.egg 
Processing dependencies for conundrum==0.1.0 
Searching for requests==1.0.4 
Best match: requests 1.0.4 
Adding requests 1.0.4 to easy-install.pth file 

Using /usr/local/lib/python2.6/dist-packages 
Searching for Markdown==2.2.0 
Best match: Markdown 2.2.0 
Processing Markdown-2.2.0-py2.6.egg 
Markdown 2.2.0 is already the active version in easy-install.pth 
Installing markdown_py script to /usr/local/bin 

Using /usr/local/lib/python2.6/dist-packages/Markdown-2.2.0-py2.6.egg 
Searching for PyYAML==3.10 
Best match: PyYAML 3.10 
Adding PyYAML 3.10 to easy-install.pth file 

Using /usr/local/lib/python2.6/dist-packages 
Finished processing dependencies for conundrum==0.1.0 

solo per essere sicuri che non ci sia qualcosa di sbagliato il mio mio sistema, ho scaricato due pacchetti da GitHub con un simile setup.py e li ho installati. Installato senza problemi.

+1

Quali comandi stai utilizzando per l'installazione e quali errori ricevi? –

+0

@ Mike è l'unico errore che ottengo. Oltre a questo ci sono un paio di avvertimenti. – elssar

+0

@elssar: quali sono gli avvertimenti? E qual è il traceback sull'errore? Forse pensi che nulla di tutto ciò sia rilevante, e forse hai ragione, ma potresti sbagliare, se sapessi esattamente cosa stava succedendo qui, non faresti questa domanda. Quindi, per favore, dacci il comando che stai facendo e l'output completo. – abarnert

risposta

15

Non riesco a eseguire setup.py da una directory diversa. Deve essere eseguito dalla directory in cui si trova. Questo era il problema qui.

Risolto.

+1

OK. Ho appena pensato che tu sapessi che 'module.py' sarebbe' $ (pwd)/module.py', non '$ (dirname /path/to/setup.py)/module.py'. Ma quello non era un buon presupposto. Gli strumenti Unix lo fanno molto più spesso in questo modo rispetto al contrario, ma non è lo stesso di "può essere solo in questo modo" (specialmente per gli utenti Windows). (A proposito, lo stesso è vero se si usa un percorso relativo in 'package_dir' - è relativo al pwd.) Pensi che i documenti debbano renderlo più chiaro? Se è così, potresti voler archiviare un bug di documentazione, o portarlo nelle mailing list. – abarnert

+0

@abarnert So dove si trova 'module.py', ho appena pensato che' setup.py' avrebbe letto automaticamente dalla sua directory root e installato nella directory di lavoro corrente. Dovrò leggere di nuovo i documenti, attentamente, per vedere se questo non è già stato scritto da qualche parte. Penso che metà dei miei problemi siano il risultato del mio casuale processo di lettura tra le righe da più fonti e poi guardando esempi di codice per capire cosa sta succedendo senza capire cosa fa. – elssar

+0

@elssar: non sono riuscito a trovarlo ovunque sia stato esplicitamente indicato nei documenti; Penso che facciano la stessa supposizione che ho fatto. Ma io, come te, non li esaminavo esattamente in modo scrutinio dettagliato. – abarnert

4

Se ho ben capito il layout, il problema è che si sta utilizzando il default package_dir, il che significa che i moduli di alto livello come module devono essere nella directory principale come module.py, non come module/module.py.

Quindi, aggiungere questo:

package_dir = {'': 'module'} 

Ora, cercherò module come module/module.py.

(PS, sarebbe molto meno confuso discutere se il tuo modulo, o la sua sottodirectory, o idealmente entrambi, fossero chiamati qualcosa di diverso dal "modulo". Inoltre, se hai usato un formato più standard per disegnare il tuo albero delle directory.)

Questo è spiegato in Listing whole packages. (Mi rendo conto che stai elencando singoli moduli, non interi pacchetti, ma i documenti per quella sezione dicono semplicemente "di nuovo, puoi sostituire la corrispondenza pacchetto/directory usando l'opzione package_dir", facendo riferimento alla sezione I linked E lo reference per package_dir è ancora meno utile, dice solo "Una mappatura del pacchetto ai nomi di directory".)

+2

Non merita di essere una seconda risposta, ma ho trovato la [Guida di Hitchhiker a Packaging 1.0 - Creazione di un pacchetto] (http://guide.python-distribute.org/creation.html) essere utile come scheletro per lo sviluppo di una struttura del pacchetto. –

+1

@Mike: IIRC, quella guida evita di spiegare tutte le cose complicate e spiega invece come evitare di aver bisogno delle cose complicate, il che significa che probabilmente non risponderà direttamente alla domanda dell'OP, ma potrebbe facilmente portarlo a non aver bisogno della risposta più. (E, anche se non lo fosse, vale la pena leggerlo.) Quindi, sicuramente +1. – abarnert

+0

@Mike Indovina che avrei dovuto essere più chiaro -> module è la directory root, ha lo stesso nome di module.py. Per essere più chiaro - la directory radice è denominata modulo e contiene lo script python module.py e tutto il resto, e una sottodirectory con i test, che non ho bisogno di installare. – elssar