2013-08-31 4 views

risposta

8

A "cartella di origine" è una directory che contiene i file di origine. Mettere i file .py in questa directory li renderà rilevabili da PyDev, in modo da poterli importare ad esempio da altri file Python.

Un "pacchetto PyDev" è un pacchetto Python. Ciò significa che contiene un file chiamato __init__.py. Ad esempio, se crei un nuovo pacchetto PyDev con il nome foo, otterrai il file foo/__init__.py. Puoi inserire altri file .py in foo/, che puoi quindi importare. Quindi, se si inserisce in bar.pyfoo/, allora si può fare

import foo.bar 

Questo non è possibile con cartelle di origine.

Normalmente i pacchetti vengono posizionati nelle cartelle di origine. Non so se sia possibile inserire una cartella di origine in un pacchetto, ma anche se lo fosse, difficilmente lo si potrebbe fare.

+0

vuol cartella di origine devono includere un __init __ py' 'in modo che interprete può trovare moduli in questa cartella.? – alwbtc

+0

No, ecco a cosa servono i pacchetti. :) –

+0

quindi "la cartella di origine" è migliore, fa la stessa cosa e non ha bisogno di un file '__init __. Py'. destra? – alwbtc

2

Una cartella di origine è la cartella che viene aggiunta a PYTHONPATH.

Un pacchetto è una cartella che ha un file __init__.py (e che si trova sotto una cartella di origine).

9

un pacchettoè un collettore per i file che hanno un raggruppamento logico

import <package>.<file> 

e una cartella fonte rende i file direttamente importabili

import <file> 

e cartella regolare è praticamente inaccessibile.

Ho fatto un rapido progetto che mostra le differenze. Ho inserito un file in ogni tipo di contenitore: cartella regolare, pacchetto e cartella di origine. Ogni file ha due elementi: una funzione chiamata show() e una classe con un singolo spettacolo membro pubblico()

enter image description here

Ho poi messo un file del driver al livello più alto (nella root del progetto, accanto ai 3 contenitori). Questo era solo per provare i diversi modi di importare le cose. Ecco una copia di tale file del driver con i commenti per descrivere come vengono utilizzati i diversi elementi:

### valid imports 
import package 
import package.file_in_package as thefileinpackage 
import file_in_source 

### invalid imports 
#import package.file_in_package.packageclass #runtime ImportError 
#import file_in_package      #unresolved import 

#import source         #unresolved import 
#import source.file_in_source     #unresolved import 
#import file_in_source.sourceclass    #runtime ImportError 

#import folder         #unresolved import 
#import file_in_folder       #unresolved import 
#import folder.file_in_folder     #unresolved import 

thefileinpackage.show() 
packageclasss_inst = thefileinpackage.packageclass() 
packageclasss_inst.show() 

file_in_source.show() 
sourceclass_inst = file_in_source.sourceclass() 
sourceclass_inst.show() 

package.file_in_package.show() 
packageclass_inst2 = package.file_in_package.packageclass() 
packageclass_inst2.show() 
+0

Quindi la cartella di origine rende i moduli direttamente "in classpath", espressi in modo Java, mentre il pacchetto in python è come un pacchetto in Java. – FaithReaper