2013-08-31 30 views

Antwort

8

A "Quellordner" ist ein Verzeichnis, das Quelldateien enthält. Wenn Sie .py-Dateien in dieses Verzeichnis einfügen, werden sie von PyDev erkannt, so dass Sie sie beispielsweise aus anderen Python-Dateien importieren können.

Ein "PyDev-Paket" ist ein Python-Paket. Dies bedeutet, dass es eine Datei mit dem Namen __init__.py enthält. Wenn Sie beispielsweise ein neues PyDev-Paket mit dem Namen foo erstellen, erhalten Sie die Datei foo/__init__.py. Sie können andere .py-Dateien in foo/ platzieren, die Sie dann importieren können. Also, wenn Sie bar.py in foo/ platzieren, dann können Sie tun

import foo.bar 

Dies ist nicht möglich mit Quellordner.

Normalerweise platzieren Sie Pakete in Quellordnern. Ich weiß nicht, ob es möglich ist, einen Quellordner in ein Paket zu packen, aber selbst wenn es so wäre, würden Sie es kaum tun.

+0

nicht Quellordner haben gehören ein '__init __ py' so dass Interpreter Module in diesem Ordner finden können.? – alwbtc

+0

Nein - dafür gibt es Pakete. :) –

+0

dann "Quellordner" ist besser, es tut die gleiche Sache und braucht keine '__init __. Py' Datei. Recht? – alwbtc

2

Ein Quellordner ist der Ordner, der dem PYTHONPATH hinzugefügt wird.

Ein Paket ist ein Ordner mit einer __init__.py Datei (und die sich unterhalb eines Quellordners befindet).

9

ein Paket ist ein Sammler für Dateien, die eine logische Gruppierung

import <package>.<file> 

und Quellordner macht die Dateien direkt importierbar

import <file> 

und die normalen Ordner ist haben im Grunde unzugänglich.

Ich machte ein schnelles Projekt, das die Unterschiede zeigt. Ich legte eine Datei in jede Art von Container: regulären Ordner, Paket und Quellordner. Jede Datei hat zwei Elemente: eine Funktion namens show() und eine Klasse mit einer einzigen öffentlichen Mitglied Show()

enter image description here

ich eine Treiberdatei dann auf der obersten Ebene setzen (in der Projektwurzel, neben den 3 Behältern). Dies war nur, um die verschiedenen Arten zu versuchen, Dinge zu importieren. Hier ist eine Kopie dieser Treiberdatei mit Kommentaren zu beschreiben, wie die verschiedenen Elemente verwendet werden:

### 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

So Ordner Source-Module machen direkt „unter Classpath“, ausgedrückt in Java-Art, während Paket in Python wie Paket in Java ist. – FaithReaper