Qual è la differenza tra una "cartella sorgente" e un "pacchetto pydev" in PyDev Eclipse?Qual è la differenza tra una "cartella sorgente" e un "pacchetto pydev" in PyDev Eclipse?
risposta
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.py
foo/
, 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.
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).
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()
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()
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
vuol cartella di origine devono includere un __init __ py' 'in modo che interprete può trovare moduli in questa cartella.? – alwbtc
No, ecco a cosa servono i pacchetti. :) –
quindi "la cartella di origine" è migliore, fa la stessa cosa e non ha bisogno di un file '__init __. Py'. destra? – alwbtc