2013-08-31 14 views

Odpowiedz

8

A "Folder źródłowy" jest katalogiem, który zawiera pliki źródłowe. Umieszczenie plików .py w tym katalogu sprawi, że będą one wykrywalne przez PyDev, dzięki czemu można na przykład zaimportować je z innych plików Pythona.

"Pakiet PyDev" to pakiet Pythona. Oznacza to, że zawiera plik o nazwie __init__.py. Na przykład, jeśli utworzysz nowy pakiet PyDev o nazwie foo, otrzymasz plik foo/__init__.py. Możesz wstawić inne pliki .py do foo/, które następnie możesz zaimportować. Tak więc, jeśli umieścić bar.py do foo/, to można zrobić

import foo.bar 

To nie jest możliwe, z folderów źródłowych.

Zwykle umieszczasz paczki w folderach źródłowych. Nie wiem, czy możliwe jest umieszczenie folderu źródłowego w pakiecie, ale nawet gdyby tak było, prawie nigdy byś tego nie zrobił.

+0

ma folderu źródłowego muszą zawierać '__init __ py' tak że interpreter można znaleźć moduły w tym folderze.? – alwbtc

+0

Nie - po to są pakiety. :) –

+0

"folder źródłowy" jest lepszy, robi to samo i nie wymaga pliku '__init __. Py'. dobrze? – alwbtc

2

Folder źródłowy to folder dodawany do PYTHONPATH.

Pakiet to folder z plikiem __init__.py (który znajduje się pod folderem źródłowym).

9

pakiet jest kolektor plików, które mają logiczne grupowanie

import <package>.<file> 

i folder źródłowy sprawia pliki bezpośrednio importable

import <file> 

i regularne folderu jest zasadniczo niedostępne.

Zrobiłem szybki projekt, który pokazuje różnice. Umieściłem jeden plik w każdym typie kontenera: regularny folder, pakiet i folder źródłowy. Każdy plik miał dwa elementy: funkcja nazywa show() i klasa z jednym pokazie członkiem społeczeństwa()

enter image description here

I następnie umieścić plik sterownika na najwyższym poziomie (w katalogu głównym projektu, obok 3 pojemników). Miało to na celu wypróbowanie różnych sposobów importowania rzeczy. Oto kopia tego pliku sterownika z komentarzem do opisania w jaki sposób poszczególne elementy są wykorzystywane:

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

Folder źródłowy tworzy moduły bezpośrednio "pod ścieżką klas", wyrażone w języku Java, podczas gdy pakiet w Pythonie jest podobny do pakietu w Javie. – FaithReaper

Powiązane problemy