“importeurror: geen module met de naam” bij het uitvoeren van Python-script

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_dirInstelling).

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__.pyonder 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.pathWas 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.appendom 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 python3te 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 rehashof iets dergelijks uit te voeren voor welke shell je ook gebruikt, dus dat de juiste python/ipython wordt opgehaald. (Controleer of er geschikte piphooks voor na de installatie zijn…)


Antwoord 13

Oplossing zonder scripting:

  1. Open Spyder -> Hulpmiddelen -> PYTHONPATH-manager
  2. Voeg Python-paden toe door op “Pad toevoegen” te klikken.
    Bijvoorbeeld: ‘C:\Users\User\AppData\Local\Programs\Python\Python37\Lib\site-packages’
  3. Klik op “Synchroniseren…” om andere programma’s (bijv. Jupyter Notebook) toe te staan ​​de pythonpaths te gebruiken die in stap 2 zijn ingesteld.
  4. 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

utilsis 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

  1. U wilt uw code niet wijzigen
  2. U wilt PYTHONPATH niet permanent wijzigen

PYTHONPATH tijdelijk 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 condamet 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 pathliben installeer het opnieuw. Verwijder de pathlib in de map sitepackagesen installeer het pathlib-pakket opnieuw met het pip-commando:

pip install pathlib

Other episodes