Polish Python Coders Group Forum

Wszystko o języku Python => Python od podstaw => Wątek zaczęty przez: szymon1051 20:56 04/02/19



Tytuł: Jak w łatwy sposób dodać katalog do import?
Wiadomość wysłana przez: szymon1051 20:56 04/02/19
Jak w łatwy sposób dodać katalog do import?

Chodzi mi jak zrobić żebym nie musiał za każdym razem pisać
Kod
import sys 
sys.path.insert(0, "E:\\Python")


Tytuł: Odp: Jak w łatwy sposób dodać katalog do import?
Wiadomość wysłana przez: rafal 21:03 04/02/19
Dlaczego tak robisz? To nie wygląda "normalnie".

Jeśli chcesz instalować zależności do swoich projektów, zobacz czym jest virtualenv albo pipenv:

https://virtualenv.pypa.io/en/latest/
https://github.com/pypa/pipenv


Tytuł: Odp: Jak w łatwy sposób dodać katalog do import?
Wiadomość wysłana przez: Guaz 21:07 04/02/19
W linuxie możesz zrobić to dowiązaniami, na przykład:

Kod
\/ Twoja_Ścieżka
    > __main__.py
    > python #~ Dowiązanie do E:\Python
    \/ otherlibs #~ Dowiązanie np. do D:\my_libs
         biblioteka.py

I w pliku __main__.py możesz np. robić import w ten sposób:
Kod
import otherlibs.biblioteka

Jednak sam musisz sobie sprawdzić czy tak samo to będzie działać ze skrótami w windows :)

@Edit:
Ale jak kolega wyżej zauważył, virtualenv'em również można to zrobić.
Jednak jeśli się uprzesz, to bardziej zalecaną metodą będzie już zrobienie katalogu submodules, i dowiązania do folderów wewnątrz submodules.


Tytuł: Odp: Jak w łatwy sposób dodać katalog do import?
Wiadomość wysłana przez: szymon1051 20:18 10/02/19
Dlaczego tak robisz? To nie wygląda "normalnie".

Jeśli chcesz instalować zależności do swoich projektów, zobacz czym jest virtualenv albo pipenv:

https://virtualenv.pypa.io/en/latest/
https://github.com/pypa/pipenv

A jak mam importować funkcje z innych plików?
Bo w książce z której się uczę było na razie pobierznie opisane, przy jakimś zagadnieniu i teraz przy zakresach "def" warstwy lokalna, zewnętrzna funkcja, globalna i wbudowane.


Tytuł: Odp: Jak w łatwy sposób dodać katalog do import?
Wiadomość wysłana przez: Guaz 18:27 11/02/19
Załóżmy masz plik foo z funkcjami `hobo` i `bobo` oraz mienną `a` zainicjalizowaną poza funkcjami jako wartość 3
Teraz masz trzy drogi:
Kod
from twoj_plik_foo import hobo
 
hobo() # Zadziała
bobo() # Nie zadziała
a #Nie będzie jeszcze zdeklarowane
Druga:
Kod
 import twoj_plik_foo
foo.hobo() #Zadziała
foo.bobo() #Zadziała
foo.a #Będzie mieć przypisane 3
Trzecia:
Kod
 from twoj_plik_foo import *
hobo() #Zadziała
fobo() #Zadziała
a  #Będzie mieć przypisane 3

Ostatnia metoda jest najgorsza, ponieważ możesz sobie nadpisać zmienne, które wewnątrz np. metod foo będą wykorzystywane.

Dlatego też się wykorzystuje `def main():`. Ale przy braku takich praktyk, zalecam drugi sposób lub w ostateczności pierwszy.

No i najważniejsze, przy importowaniu własnych plików używaj takiej struktury:
Kod
### Sekcja importów ###
 
def main(): # Twoja funkcja main w której wykonujesz wywołania programu, ewentualnie z jakimiś argumentami.
 
### Sekcja innych funkcji ###
 
if __name__ == "__main__":
   main() #Dzięki temu możesz mieć pewność że importując plik, nie wykonasz jego main'a.
Zwłaszcza kiedy chcesz użyć tylko kilku funkcji z danego programu. Albo wykonujesz testy czy wszystko działa, testy w funkcji main załatwią taki problem, albo nawet już pod samą sekcją if __name__ (...).