Python – Module niet gevonden

Ik ben een beginner met Python. Voordat ik begin, hier is mijn Python-mapstructuur

-project
----src
------model
--------order.py
------hello-world.py

Onder srcheb ik een map met de naam modeldie een Python-bestand heeft met de naam order.pywaarvan de inhoud volgt:

class SellOrder(object):
    def __init__(self,genericName,brandName):
        self.genericName = genericName
        self.brandName = brandName

Vervolgens bevindt mijn hello-world.pyzich in de map src, één niveau boven order.py:

import model.order.SellOrder
order = SellOrder("Test","Test")
print order.brandName

Telkens wanneer ik python hello-world.pyuitvoer, resulteert dit in de fout

Traceback (most recent call last):
  File "hello-world.py", line 1, in <module>
    import model.order.SellOrder
ImportError: No module named model.order.SellOrder

Is er iets dat ik heb gemist?


Antwoord 1, autoriteit 100%

Alle modules in Python moeten een bepaalde directorystructuur hebben. Details vind je hier.

Maak een leeg bestand met de naam __init__.pyonder de modeldirectory, zodat uw directorystructuur er ongeveer zo uitziet:

.
└── project
    └── src
        ├── hello-world.py
        └── model
            ├── __init__.py
            └── order.py

Verander ook in uw hello-world.py-bestand de importinstructie in het volgende:

from model.order import SellOrder

Dat zou het moeten oplossen

PS: Als u uw model-directory op een andere locatie plaatst (niet in dezelfde directory-tak), moet u het python-pad wijzigen met behulp van sys.path.


Antwoord 2, autoriteit 13%

je hebt een bestand nodig met de naam __init__.py(twee onderstrepingstekens aan elke kant) in elke map in de hiërarchie, dus één in src/en één in model/. Dit is waar python naar zoekt om te weten dat het toegang moet krijgen tot een bepaalde map. De bestanden zijn bedoeld om initialisatie-instructies te bevatten, maar zelfs als je ze leeg maakt, zal dit het oplossen.


Antwoord 3, autoriteit 11%

Als het uw root-module is, voeg deze dan toe aan PYTHONPATH(PyCharm doet dat meestal)

export PYTHONPATH=$PYTHONPATH:<root module path>

voor Docker:

ENV PYTHONPATH="${PYTHONPATH}:<root module path in container>"

Antwoord 4, autoriteit 4%

U moet ervoor zorgen dat de module is geïnstalleerd voor alleversies van python

U kunt controleren of een module voor python is geïnstalleerd door het volgende uit te voeren:

pip uninstall moduleName

Als het is geïnstalleerd, wordt u gevraagd of u het wilt verwijderen of niet. Mijn probleem was dat het voor python was geïnstalleerd, maar niet voor python3. Om te controleren of er een module voor python3 is geïnstalleerd, voer je het volgende uit:

python3 -m pip uninstall moduleName

Als u hierna merkt dat een module niet is geïnstalleerd voor een of beide versies, gebruik dan deze twee opdrachten om de module te installeren.

  • pip install moduleName
  • python3 -m pip install moduleName

Antwoord 5, autoriteit 2%

Na een poging om het pad toe te voegen met:

pip show

op opdrachtprompt en met

sys.path.insert(0, "/home/myname/pythonfiles")

en werkte niet. Kreeg ook een SSL-fout bij het opnieuw installeren van de module met deze keer conda in plaats van pip.

Ik heb gewoon de module gekopieerd die niet werd gevonden van het pad “De mijne was in

C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages 

dus ik heb het gekopieerd naar 'C:\Users\user\Anaconda3\Lib\site-packages'


Antwoord 6

Ik had dezelfde fout. Voor degenen die python-scripts op verschillende servers uitvoeren, controleer of het python-pad correct is opgegeven in shebang. Voor mij stond het op elke server in verschillende mappen.


Antwoord 7

Ik gebruik Python alleen als secundaire taal en heb waarschijnlijk een beginnersfout gemaakt. Ik had een soortgelijk probleem en mijn fout belde:

import requests

Ik kreeg de fout

ModuleNotFoundError: No module named 'requests.adapters'; 'requests' is not a package

Blijkbaar heeft het bestand dat ik heb gemaakt in dezelfde map met de naam “requests.py”, een conflict veroorzaakt. Door het bestand te hernoemen werkte het weer.


Antwoord 8

Het is makkelijker als je deze code gebruikt

python3 -m module.sub_module

Bijvoorbeeld:

python3 -m entrypoint.settings

Antwoord 9

je moet de functie importeren zodat het programma weet wat dat is, hier is een voorbeeld:

import os 
import pyttsx3

ik had eerst hetzelfde probleem, daarna importeerde ik de functie en het werkt, dus ik zou het echt aanraden om het te proberen

Other episodes