Problem z import kiedy uruchamiam skrypt przez terminal

0

Piszę kod w pycharm, w katalogu domyślnym dla pycharm. Gdy go uruchamiam w pycharm działa, ale kiedy chcę go uruchomić przez konsolę wywala mi błąd, że nie widzi plików które są importowane: ModuleNotFoundError: No module named 'Configuration'. Nie rozumiem dlaczego tak się dzieje? Co więcej mam mój skrypt dodany do autostart systemu i uruchamia się prawidłowo, działa w tle. Problem tkwi tylko gdy chcę go uruchomić ręcznie przez terminal. Dodam, że korzystam z Linux

2

Masz inny interpreter w Pycharm, a inny uruchamiasz z konsoli i ten w swoim katalogu z bibliotekami nie ma tego skryptu. Uruchom tym samym interpreterem co Pycharm, albo dodaj go do tego konsolowego, lub zainstaluj.

0

Pycharm ma interpreter python 3.9. Każdy mój plik na początku zawiera wpis: #!/usr/bin/env python, a pliki w terminalu uruchamiam za pomocą polecenia: python3 plik.py. Problem mam z importowaniem moich plików (modułów), nie bibliotek instalowanych przez pip. Dokładnie dostaję taki komunikat:

File "/home/Zagiewa/PycharmProjects/Project/Modules/list_monitor.py", line 15, in <module>
from Configuration import conf
ModuleNotFoundError: No module named 'Configuration'

0

Wpisz w konsoli, which python3 i sprawdź ścieżkę do interpretera w Pycharm, będą inne.

0

W terminalu mam: /usr/bin/python3, w pycharm mam: ~/PycharmProjects/venv/bin/python3. Powinienem dodać: ~/PycharmProjects/venv/bin/python3 do ścieżki python? czy jakoś inaczej?

0

@Zagiewa: W ogóle dobrze jest też wrzucić kod, żebyśmy mogli zobaczyć, czy nie ma problemu gdzieś indziej.

1

@Zagiewa: Jak Chcesz ten interpreter z Pycharm, to wejdź do Projects i aktywuj to venv:
source venv/bin/activate.

0

@PerlMonk: kod jest prawidłowy inaczej by nie działał w pycharm czy podczas odpalania skryptu przez autostart. Problem musi tkwić gdzieś w interpreterze, ścieżkach itp. a nie bardzo to ogarniam.
@lion137: aktywacja tego interpretera nic nie daje, dalej ten sam problem:
(venv) [2010] Zagiewa ~/PycharmProjects/Project/Modules $ python3 list_monitor.py
Traceback (most recent call last):
File "/home/Zagiewa/PycharmProjects/Project/Modules/list_monitor.py", line 15, in <module>
from Configuration import conf
ModuleNotFoundError: No module named 'Configuration'

0

Nie wiem co robisz u siebie na kompie, jeśli w lib tego interpretera jest ten moduł, to musi się importować, jak tutaj, jestem w katalogu pytorch:

➜  pytorch source venv_pytorch/bin/activate                                     
(venv_pytorch) ➜  pytorch python
Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> 
0

Działa.

Do tej pory mój PYTHONPATH był pusty. Dodałem do niego katalog z moim projektem. Teraz mój PYTHONPATH wygląda tak:
[2150] Zagiewa ~/PycharmProjects/Project/Modules $ echo $PYTHONPATH
/home/Zagiewa/PycharmProjects/Project

I teraz wszystko działa jak powinno. Dzięki

1

Tak na przyszłość, bo takie rozwiązanie przepnę się w terminalu / przez PYTHONPATH na ten sam interpreter co mam w PyCharm będzie działać do czasu, gdy masz jeden projekt albo może kilka:

  • Tak jak sugerował @lion137 korzystaj z venv'ów lub ogólnie z "jakichś" środowisk do pilnowania lokalnie zainstalowanych zależności (bo np. conda używa chyba czegoś innego a nie virtualenv)
  • To nie będzie przenośne, bo jak np. będziesz chciał odpalić projekt na stacji która akurat nie ma PyCharma, to nagle nie będziesz mieć swoich zależności i co gorsza nie będziesz wiedział, jakich dokładnie potrzebujesz zależności
  • Nawet jak już PyCharm zadba Ci o zainstalowanie wszystkich bibliotek z poziomu IDE i dorzuci je do skonfigurowanego środowiska i będziesz go zawsze mieć, to w sumie nie wiesz co zainstalowałeś i w jakiej wersji (bo z czasem tego przybywa i człowiek się gubi). Teraz wyobraź sobie, że coś tam się podzieje, chcesz sobie ten projekt otworzyć od nowa np. po reinstalacji systemu albo na drugim komputerze. Instalujesz PyCharm, otwierasz projekt, musisz instalować od nowa biblioteki i... nie działa. Bo wyszły nowe wersje bibliotek i się coś pozmieniało, a przy instalacji zostały zaciągnięte właśnie najnowsze ;)
  • Jak chcesz się całkiem uniezależnić od tego, co tam porobi Ci PyCharm żeby te importy działały (a kiedyś zechcesz, prędzej czy później) to różne managery zależności (jak pip, conda) dostarczają sposobów na zarządzanie nimi w uporządkowany sposób, bez uzależniania się od magii IDE. W przypadku pip możesz zdefiniować sobie w projekcie plik requirements.txt i wylistować w nim zależności, minimalne / maksymalne wersje z jakimi będzie działać projekt i tak dalej. Jak już masz swój venv z zainstalowanymi zależnościami, to możesz wygenerować taki plik przez pip freeze > requirements.txt. Łatwiej też wtedy podbić wersję biblioteki. Potem mając w projekcie zdefiniowany taki pliczek możesz bezproblemowo zainstalować potrzebne zależności w nowym venv'ie poleceniem pip install -r requirements.txt

Oczywiście przykład jest na pip i pliku requirements, ale tak naprawdę dowolny szanujacy się manager pakietów/bibliotek dowolnego języka programowania powinien dawać możliwość uporządkowania zależności projektu, w ten czy inny sposób.

1 użytkowników online, w tym zalogowanych: 0, gości: 1