web-dev-qa-db-fra.com

ModuleNotFoundError: Python 3.6 ne trouve pas les modules tandis que Python 3.5 le fait

Je voulais mettre à jour ma python de 3.5 à 3.6. Depuis que j'utilise WinPython , j'ai téléchargé et installé la version récente comme je l'ai fait auparavant avec la version 3.5.

Cependant, si j'utilise la version 3.6, j'obtiens un ModuleNotFoundError chaque fois que j'importe un module auto-créé. Un exemple minimal: j'ai créé un fichier t1.py qui contient uniquement une instruction pass et un fichier t2.py contenant le code suivant:

import t1
print("done")

Les deux fichiers se trouvent dans le même dossier D:\MyProject\src. Maintenant, lorsque j'exécute le fichier avec python 3.5, tout fonctionne bien:

'C:\Program Files\WinPython-64bit-3.5.1.2\python-3.5.1.AMD64\python.exe' D:\MyProject\src\t2.py
done

Cependant, avec python 3.6 j'obtiens

'C:\Program Files\WinPython-64bit-3.6.0.1Qt5\python-3.6.0.AMD64\python.exe' D:\MyProject\src\t2.py
Traceback (most recent call last):
  File "D:\MyProject\src\t2.py", line 6, in <module>
    import t1
ModuleNotFoundError: No module named 't1'

J'ai manqué d'idées sur le problème et j'apprécierais une nouvelle inspiration.

7
Samufi

Est-ce que cela fonctionnerait? dans t2.py

import os
__path__=[os.path.dirname(os.path.abspath(__file__))]
from . import t1
print("t2 done")

Python-3.6 change sa façon de travailler, avec le fichier "python._pth" à côté de python.exe (au lieu de "pyvenv.cfg" dans les versions précédentes)

Si vous ne souhaitez pas modifier votre source, vous devez ajouter la ligne "D:\MyProject\src" dans le fichier Python._pth, ou un chemin d'accès relatif à celle-ci depuis l'emplacement python._pth. dans mon exemple, cela fonctionne avec:

python36.Zip
DLLs
Lib
.
..\test
import site

" http://bugs.python.org/issue29578?@ok_message=msg%20287921%20created%0Aissue%2029578%20message_count%2C%20messages%20edited%20ok&@template=item "

Autre solution plus simple si vous n'avez pas de python installé par le système: renommez le fichier "python._pth", à côté de "python.exe", en "pythonzz._pth"

Le responsable de Python "Windows" vient d’écrire que la solution la plus simple devrait également être compatible avec Python-3.6.0.

8
stonebig