2016-05-27 15 views
2

hatte ich ein Python-Projekt mit vielen Importen wie:Import in der Konsole arbeiten, aber nicht in PyCharm

from src.main.fr.some.module import someclass 

und es funktioniert gut, aber meine Kollegen wollten die Importe wie sein:

from fr.some.module import someclass 

Dann änderte ich den PYTHONPATH im activate Skript meines virtualenv wie:

export PYTHONPATH="/home/giffon/Documents/wopmars/src/main:/home/giffon/Documents/wopmars/src/test" 

und ersetzt alle src.main.fr.some.module mit fr.some.module.

Dann habe ich versucht, meinen Code in der Konsole und die Ausgabe war gut (beachten Sie, dass ich die PYTHONPATH am Anfang meines Codes und /home/giffon/Documents/wopmars/src/main erscheint wie erwartet).

(WopMars)[email protected]:~/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing$ python3 Parser.py 
PRINTING THE PYTHONPATH 
/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/pyparsing-2.1.4-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/cycler-0.10.0-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/pytz-2016.4-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/python_dateutil-2.5.3-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/six-1.10.0-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/numpy-1.11.0-py3.4-linux-x86_64.egg 
/home/giffon/Documents/wopmars/src/main 
/home/giffon/Documents/wopmars/src/test 
/home/giffon/virtualenvs/WopMars/lib/python3.4 
/home/giffon/virtualenvs/WopMars/lib/python3.4/plat-x86_64-linux-gnu 
/home/giffon/virtualenvs/WopMars/lib/python3.4/lib-dynload 
/usr/lib/python3.4 
/usr/lib/python3.4/plat-x86_64-linux-gnu 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages 



Reading the definition file... -> done. 
Checking whether the file is well formed... -> done. 
Building the execution DAG... -> done. 
Writing the dot file... -> done. 

Da ich aber mit pycharm arbeite, wollte ich, dass die IDE meine Änderungen berücksichtigt. Und hier kommen die Probleme.

Ich habe irgendwo gelesen, dass ich, indem Sie folgende den Interpreter Python-Pfad ändern sollte:

Datei> Einstellungen> Projet: wopmars> Projet Interpreter> "Rad"> Mehr ...> „Pfad anzeigen für den ausgewählten Interpreter (WopMars Interpreter ausgewählt)“> +> "Wechseln Sie zu/home/Giffon/Dokumente/wopmars/src/main"> Ok> Ok> bewerben> Ok

Und dann ausführen ich die gleicher Code wie oben:

/home/giffon/virtualenvs/WopMars/bin/python3 /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing/Parser.py 
PRINTING THE PYTHONPATH 
/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/pyparsing-2.1.4-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/cycler-0.10.0-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/pytz-2016.4-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/python_dateutil-2.5.3-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/six-1.10.0-py3.4.egg 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages/numpy-1.11.0-py3.4-linux-x86_64.egg 
/home/giffon/Documents/wopmars/src/test 
/home/giffon/Documents/wopmars/src/main 
/home/giffon/virtualenvs/WopMars/lib/python3.4 
/home/giffon/virtualenvs/WopMars/lib/python3.4/plat-x86_64-linux-gnu 
/home/giffon/virtualenvs/WopMars/lib/python3.4/lib-dynload 
/usr/lib/python3.4 
/usr/lib/python3.4/plat-x86_64-linux-gnu 
/home/giffon/virtualenvs/WopMars/lib/python3.4/site-packages 



Traceback (most recent call last): 
    File "/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing/Parser.py", line 12, in <module> 
    from fr.tagc.wopmars.framework.management.DAG import DAG 
ImportError: No module named 'fr.tagc.wopmars.framework.management.DAG' 

Sie haben wahrscheinlich bemerkt, dass die /home/giffon/Documents/wopmars/src/main im PYTHONPATH Bedeutung scheint, dass die Konfiguration von PyCharm Dolmetschers Weg berücksichtigt wurde. Der Interpreter weiß also, wo er Module finden kann, kann aber fr ... nicht sehen. Gibt es eine Idee, dieses Problem zu lösen?

Es ist wahrscheinlich nicht interessant für dieses Problem zu lösen, aber den Fehler-raising-Code ist:

print("PRINTING THE PYTHONPATH")       
for p in sys.path:           
    print(p)            
print("\n\n")            


from fr.tagc.wopmars.framework.management.DAG import DAG 

Hinweis: Ändern PYTHONPATH in .profile oder .bashrc gab mir die gleichen Ergebnisse

Hinweis 2: wenn ich PYTHONPATH nicht exportiere, gibt mir die Konsole den gleichen Fehler als pycharm

+1

Werfen Sie einen Blick auf diese: http://Stackoverflow.com/a/7334681/620382 – Zulan

+0

Vielen Dank, dachte ich mein Problem und beantwortete meine eigene Frage. –

Antwort

0

ich löse d mein Problem dank Zulans Kommentar.

TLDR:

Legen Sie das Verzeichnis src/main/ vor src/test/ ein in PyCharm Interpreter PYTHONPATH.


die Option -v verwenden sowohl für Python-Interpreter in PyCharm und Konsole, ich habe folgende Ausgänge bekam:

Console Ausgabe:

# /home/giffon/Documents/wopmars/src/main/fr/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/__init__.py 
# code object from '/home/giffon/Documents/wopmars/src/main/fr/__pycache__/__init__.cpython-34.pyc' 
import 'fr' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b160> 
# /home/giffon/Documents/wopmars/src/main/fr/tagc/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/tagc/__init__.py 
# code object from '/home/giffon/Documents/wopmars/src/main/fr/tagc/__pycache__/__init__.cpython-34.pyc' 
import 'fr.tagc' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b358> 
# /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/__init__.py 
# code object from '/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/__pycache__/__init__.cpython-34.pyc' 
import 'fr.tagc.wopmars' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b400> 
# /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/__init__.py 
# code object from '/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/__pycache__/__init__.cpython-34.pyc' 
import 'fr.tagc.wopmars.framework' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b4a8> 
# /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/management/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/management/__init__.py 
# code object from '/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/management/__pycache__/__init__.cpython-34.pyc' 
import 'fr.tagc.wopmars.framework.management' # <_frozen_importlib.SourceFileLoader object at 0x7f384ce4b550> 

PyCharm Ausgang:

# /home/giffon/Documents/wopmars/src/test/fr/tagc/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/test/fr/tagc/__init__.py 
# code object from '/home/giffon/Documents/wopmars/src/test/fr/tagc/__pycache__/__init__.cpython-34.pyc' 
import 'fr.tagc' # <_frozen_importlib.SourceFileLoader object at 0x7fb1532422e8> 
# /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/__init__.py 
# code object from '/home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/__pycache__/__init__.cpython-34.pyc' 
import 'fr.tagc.wopmars' # <_frozen_importlib.SourceFileLoader object at 0x7fb153242390> 
# /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/__init__.py 
# code object from '/home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/__pycache__/__init__.cpython-34.pyc' 
import 'fr.tagc.wopmars.framework' # <_frozen_importlib.SourceFileLoader object at 0x7fb153242438> 
# /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/management/__pycache__/__init__.cpython-34.pyc matches /home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/management/__init__.py 
# code object from '/home/giffon/Documents/wopmars/src/test/fr/tagc/wopmars/framework/management/__pycache__/__init__.cpython-34.pyc' 
import 'fr.tagc.wopmars.framework.management' # <_frozen_importlib.SourceFileLoader object at 0x7fb1532424e0> 
Traceback (most recent call last): 
    File "/home/giffon/Documents/wopmars/src/main/fr/tagc/wopmars/framework/parsing/Parser.py", line 12, in <module> 
    from fr.tagc.wopmars.framework.management.DAG import DAG 
    File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked 
ImportError: No module named 'fr.tagc.wopmars.framework.management.DAG' 

Sie haben vielleicht den geringfügigen Unterschied zwischen den beiden Ausgaben bemerkt: Konsoleninterpreter suchen in wopmars/src/main/ während pycharm interpreter Suche in wopmars/src/test/.

Eigentlich, wenn ich sorgfältig auf dem PYTHONPATH gedruckt aussehen, sind sie nicht das gleiche:

  • in der Konsole erscheint /home/giffon/Documents/wopmars/src/main vor /home/giffon/Documents/wopmars/src/test in der Liste sys.path
  • In PyCharm, es ist das Gegenteil

Dann setze ich /home/giffon/Documents/wopmars/src/testnach/home/giffon/Documents/wopmars/src/main in pycharm und es funktionierte perfekt ly. Ich denke, dass der Python-Interpreter beginnt, den ersten Teil des Modulnamens in src/test/ zu finden, dann findet er das Ende nicht und löst einen Fehler aus, ohne in andere Pfade zu schauen.

Verwandte Themen