C'è molto da fare qui. dovresti leggere i pacchetti Python e la gestione dei moduli http://docs.python.org/2/tutorial/modules.html#packages ma l'idea di base è che fileX abbia bisogno di sapere dove sono file1 e file2 per usarli.
Per trasformare una cartella in un pacchetto, è sufficiente contenere un file __init__.py
. Quello che ti suggerisco di fare è (in un terminale)
$ touch Foo/__init__.py
$ touch Foo/Project1/__init__.py
(presumendo che tu stia usando unix/linux).
Quindi, in qualche modo, fileX deve sapere dove si trova il pacchetto Foo
. È possibile chiamare sys.path.append(PATH)
dove PATH è la posizione di Foo.
infine all'interno di fileX.py avresti
import sys
sys.path.append(PATH) #replace PATH with the path to Foo
from Foo.Project1 import file1
#use its functions
file1.function_name(argument)
se si vuole veramente dire solo function_name
senza la precedente file1.
è possibile importare tutte le sue funzioni dicendo from Foo.Project1.file1 import *
tuttavia prega di notare chefrom module import *
è altamente visto di buon occhio, come si mescola i nomi e rendono il codice meno leggibile e comprensibile
fonte
2013-01-24 19:40:14
Project1 e Project2 sono entrambi sul mio server con entrambe le versioni controllate. Se Project1 viene aggiornato, quindi dovrò aggiornare il pacchetto installato ogni volta su project2. Ma, se manipolo il mio sys.path, semplicemente facendo un git pull su Project1 aggiornerò il mio modulo. Sto facendo qualcosa di puzzolente? O va bene farlo! Grazie! – Abhishek