Ik probeer een script uit te voeren dat onder andere een Python-script lanceert. Ik krijg een importeurror: geen module met de naam … Als ik echter IPYTHON start en dezelfde module importeer op dezelfde manier door de tolk, wordt de module geaccepteerd.
Wat is er aan de hand en hoe kan ik het repareren? Ik heb geprobeerd te begrijpen hoe Python PythonPath gebruikt, maar ik ben grondig in de war. Elke hulp zou zeer op prijs stellen.
1, Autoriteit 100%
Dit probleem ontstaat vanwege de manieren waarop de opdrachtregel Ipython-tolk gebruikt uw huidige pad versus de manier waarop een afzonderlijk proces (of het is een IPYTHON-notebook, extern proces, enz.). IPYTHON zal op zoek gaan naar modules om te importeren die niet alleen in uw Sys.Path worden gevonden, maar ook op uw huidige werkmap. Bij het starten van een tolk van de opdrachtregel, is de huidige map die u in werkt, is dezelfde die u begon met IPYTHON IN. Als u
uitvoert
import os
os.getcwd()
U ziet dit waar.
Laten we echter zeggen dat u een IPYTHON-notebook gebruikt, voert u os.getcwd()
en uw huidige werkdirectory in plaats daarvan de map waarin u de notebook hebt verteld om vanuit uw Ipython_noteBook_Config te werken. PY-bestand (meestal met behulp van de c.NotebookManager.notebook_dir
Instelling).
De oplossing is om de Python-tolk te bieden met de pad-naar-uw-module. De eenvoudigste oplossing is om dat pad naar uw Sys’path-lijst toe te voegen. Probeer in uw notebook eerst:
import sys
sys.path.append('my/path/to/module/folder')
import module_of_interest
Als dat niet werkt, heeft u een ander probleem op uw handen dat niet gerelateerd is aan PATH-TO-import en u moet meer informatie over uw probleem verstrekken.
De betere (en meer permanente) manier om dit op te lossen is om uw PythonPath in te stellen, dat de tolk biedt met extra mappen kijken voor Python-pakketten / -modules. Het bewerken of instellen van het PythonPath als Global Var is OS-gebruiksafhankelijk en wordt hier in detail besproken voor Unix of Windows .
2, Autoriteit 8%
Maak gewoon een leeg Python-bestand met de naam __init__.py
onder de map die een fout toont, terwijl u het Python-project uitvoert.
3, Autoriteit 8%
Zorg ervoor dat ze beide dezelfde tolk gebruiken. Dit gebeurde me op ubuntu:
$ ipython3 -c 'import sys; print(sys.version)'
3.4.2 (default, Jun 19 2015, 11:34:49) \n[GCC 4.9.1]
$ python3 -c 'import sys; print(sys.version)'
3.3.0 (default, Nov 27 2012, 12:11:06) \n[GCC 4.6.3]
en sys.path
Was anders tussen de twee tolken. Om het te repareren, heb ik Python 3.3 verwijderd.
4, Autoriteit 4%
De belangrijkste reden is de Sys.Paths of Python en Ipython zijn anders.
Raadpleeg Lucypark Link , de oplossing werkt in mijn geval. Het gebeurt bij het installeren van OpenCV door
conda install opencv
en heb importfout in IPYTHON, er zijn drie stappen om dit probleem op te lossen:
import cv2
ImportError: ...
1. Controleer pad in Python en Ipython met de volgende opdracht
import sys
sys.path
U vindt ander resultaat van Python en Jupyter. Tweede stap, gebruik gewoon sys.path.append
om het gemiste pad te repareren door Try-and-Fout.
2. Tijdelijke oplossing
in IPYTHON:
import sys
sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages')
import cv2
het ImportError:..
probleem opgelost
3. Permanente oplossing
Maak een iPython-profiel en stel de eerste toevoeging in:
In bash-shell:
ipython profile create
... CHECK the path prompted , and edit the prompted config file like my case
vi /home/osboxes/.ipython/profile_default/ipython_kernel_config.py
In vi, toevoegen aan het bestand:
c.InteractiveShellApp.exec_lines = [
'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")'
]
KLAAR
Antwoord 5, autoriteit 3%
Het doen van sys.path.append('my-path-to-module-folder')
zal werken, maar om te voorkomen dat je dit telkens in IPython moet doen als je de module wilt gebruiken, je kunt export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"
toevoegen aan je ~/.bash_profile
-bestand.
Antwoord 6
Zo heb ik het opgelost:
import os
import sys
module_path = os.path.abspath(os.getcwd() + '\\..')
if module_path not in sys.path:
sys.path.append(module_path)
Antwoord 7
Voordat ik ipython installeerde, installeerde ik modules via easy_install; zeg sudo easy_install mechanize
.
Na het installeren van ipython moest ik easy_install opnieuw uitvoeren zodat ipython de modules kon herkennen.
Antwoord 8
Als u het vanaf de opdrachtregel uitvoert, is de Python-interpreter soms niet op de hoogte van het pad waar naar modules moet worden gezocht.
Hieronder staat de directorystructuur van mijn project:
/project/apps/..
/project/tests/..
Ik was bezig met het onderstaande commando:
>> cd project
>> python tests/my_test.py
Na het uitvoeren van bovenstaande opdracht kreeg ik onderstaande foutmelding
no module named lib
lib is geïmporteerd in my_test.py
ik drukte sys.path af en ontdekte dat het pad van het project waaraan ik werk niet beschikbaar is in de sys.path-lijst
ik heb onderstaande code toegevoegd aan het begin van mijn script my_test.py
.
import sys
import os
module_path = os.path.abspath(os.getcwd())
if module_path not in sys.path:
sys.path.append(module_path)
Ik weet niet zeker of het een goede manier is om het op te lossen, maar ja, het werkte voor mij.
Antwoord 9
Ik heb ontdekt dat de oplossing voor dit probleem hier uitgebreid is gedocumenteerd:
https://jakevdp. github.io/blog/2017/12/05/installing-python-packages-from-jupyter/
In principe moet u de pakketten binnen de Jupyter-omgeving installeren en shell-commando’s geven zoals:
!{sys.executable} -m pip install numpy
Kijk op de bovenstaande link voor een gezaghebbend volledig antwoord.
Antwoord 10
Dit soort fouten treden hoogstwaarschijnlijk op als gevolg van python-versieconflicten. Als je applicatie bijvoorbeeld alleen op python 3 draait en je hebt ook python 2, dan is het beter om aan te geven welke versie je wilt gebruiken.
Gebruik bijvoorbeeld
python3 .....
in plaats van
python
Antwoord 11
Had een soortgelijk probleem, opgelost door python3
te bellen in plaats van python
, mijn modules waren in Python3.5.
Antwoord 12
Ik heb nog een andere bron van deze discrepantie gevonden:
Ik heb ipython zowel lokaal als algemeen in virtualenvs geïnstalleerd. Mijn probleem was dat, in een nieuw gemaakte virtualenv met ipython, het systeem ipython werd opgepikt, wat een andere versie was dan de python en ipython in de virtualenv (een 2.7.x versus een 3.5.x), en hilariteit volgde.
Ik denk dat het slimste om te doen wanneer je iets installeert dat een binair bestand heeft in yourvirtualenv/bin
, is om onmiddellijk rehash
of iets dergelijks uit te voeren voor welke shell je ook gebruikt, dus dat de juiste python/ipython wordt opgehaald. (Controleer of er geschikte pip
hooks voor na de installatie zijn…)
Antwoord 13
Oplossing zonder scripting:
- Open Spyder -> Hulpmiddelen -> PYTHONPATH-manager
- Voeg Python-paden toe door op “Pad toevoegen” te klikken.
Bijvoorbeeld: ‘C:\Users\User\AppData\Local\Programs\Python\Python37\Lib\site-packages’ - Klik op “Synchroniseren…” om andere programma’s (bijv. Jupyter Notebook) toe te staan de pythonpaths te gebruiken die in stap 2 zijn ingesteld.
- Herstart Jupyter als het open is
Antwoord 14
Is mij overkomen met de directory utils
. Ik probeerde deze map te importeren als:
from utils import somefile
utils
is al een pakket in python. Verander gewoon je directorynaam in iets anders en het zou prima moeten werken.
Antwoord 15
Dit antwoord is van toepassing op deze vraag als
- U wilt uw code niet wijzigen
- U wilt PYTHONPATH niet permanent wijzigen
het onderstaande pad kan relatief zijn
PYTHONPATH=/path/to/dir python script.py
Antwoord 16
import sys
sys.path.append('/Users/{user}/Library/Python/3.7/lib/python/site-packages')
import ta
Antwoord 17
Als iemand dit probleem tegenkomt met behulp van conda
met Jupyter Notebook in MSVS Code, is de oplossing om ervoor te zorgen dat je de juiste kernel gebruikt. De kernel bevindt zich in een vak in de rechterbovenhoek van de interface en ziet er als volgt uit:
Ik verwees de mijne naar de versie van Python die ook overeenkwam met mijn applicatiepad — probleem opgelost!
Antwoord 18
Verwijder pathlib
en installeer het opnieuw. Verwijder de pathlib in de map sitepackages
en installeer het pathlib-pakket opnieuw met het pip-commando:
pip install pathlib