2015-04-20 7 views
7

Ho un progetto che utilizza i sottomoduli git. Nel mio file python voglio usare le funzioni di un altro file python nel progetto del sottomodulo.Come importare il file python dal sottodulo git

Per funzionare ho dovuto aggiungere il file init .py a tutte le sottocartelle nel percorso. La mia struttura di cartelle è il seguente:

myproj 
├── gitmodules 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   └── mygitsubmodule 
│    ├── __init__.py 
│    ├── __init__.pyc 
│    └── file.py 
└── myfile.py 

C'è un modo per farlo funzionare senza toccare mygitsubmodule?

Grazie

risposta

8

è possibile aggiungere a sys.path nel file che si desidera essere in grado di accedere al modulo, qualcosa come:

import sys 
sys.path.append("/home/me/myproj/gitmodules") 
import mygitsubmodule 

EDIT: Questo esempio è l'aggiunta di un tracciato come grezzo stringa per chiarire cosa sta succedendo. Dovresti utilizzare i metodi più sofisticati e indipendenti dal sistema descritti di seguito per determinare e assemblare il percorso.

Inoltre, ho trovato migliore, quando ho utilizzato questo metodo, per utilizzare sys.path.insert(1, .. poiché alcune funzionalità sembrano fare affidamento su sys.path [0] che è la directory iniziale del programma.

+0

Stavo saltellando in un modo meno complicato (modificando sys.path solo per un'importazione ..), ma suppongo che potrebbe non essere possibile farlo in un altro modo :) – pedrorijo91

+5

@ pedrorijo91: 'sys.path' è il percorso di caricamento di Python, da non confondere con la variabile di ambiente '$ PATH' o con gli equivalenti. È abbastanza leggero da aggiungere e non altera il tuo ambiente. ** Modifica: ** Suggerirei di elaborare il percorso in fase di esecuzione invece di codificarlo. Qualcosa che riguarda il percorso corrente ('os.path.dirname (os.path.abspath (__ file __))') e 'os.path.join' –