Ik ben een beginner met Python. Voordat ik begin, hier is mijn Python-mapstructuur
-project
----src
------model
--------order.py
------hello-world.py
Onder src
heb ik een map met de naam model
die een Python-bestand heeft met de naam order.py
waarvan de inhoud volgt:
class SellOrder(object):
def __init__(self,genericName,brandName):
self.genericName = genericName
self.brandName = brandName
Vervolgens bevindt mijn hello-world.py
zich 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.py
uitvoer, 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__.py
onder de model
directory, 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