J'essaie de faire une importation dans python d'un niveau de répertoire vers le haut.
import sys
sys.path.append('..')
from cn_modules import exception
J'obtiens une erreur de VSCode lorsque j'essaie d'exécuter la tâche de génération en tant que:
ImportError: aucun module nommé cn_modules
Le même code fonctionne sans aucune erreur du terminal (python).
Je rencontre le problème lorsque j'essaie de l'exécuter à partir de la tâche d'exécution de construction de VSCode.
Un indice sur ce qui ne va pas ici?
Avoir passé du temps tranquille mais pas en mesure de résoudre ce problème, toute aide est appréciée.
REMARQUE: cela fonctionne lorsque je débogue également avec vscode. Ci-dessous ma configuration pour launch.json et tasks.json
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Console App",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"program": "${file}",
"externalConsole": true,
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit"
],
"env": {},
"envFile": "${workspaceRoot}/.env",
"console":"integratedTerminal",
"pythonPath": "${config:python.pythonPath}"
}
]
}
tasks.json
{
"version": "0.1.0",
"command": "/usr/bin/python",
"isShellCommand": true,
"args": ["${file}"],
"showOutput": "always",
"env": {},
"envFile": "${workspaceRoot}/.env",
"pythonPath": "${config:python.pythonPath}"
}
J'ai essayé d'ajouter ceci dans mon launch.json
, alors ça marche!
"env": {"PYTHONPATH": "${workspaceRoot}"}
ci-dessous est mon launch.json
"name": "Python: Current File (Integrated Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {"PYTHONPATH": "${workspaceRoot}"},
"console": "integratedTerminal"
souhaite que cela puisse vous aider! :)
Cette solution m'aide à résoudre ce problème de manière permanente. Les étapes sont données ci-dessous.
Merci Honza Kalfus jankalfus
J'ai remarqué que si j'utilise Fichier -> Fermer le dossier puis Fichier -> Ouvrir le dossier ... et rouvrir le dossier du projet, les erreurs ont disparu. Si je redémarre simplement VS Code à la place, je continue à recevoir les erreurs. Je suppose qu'un cache interne est effacé?
J'ai eu le même problème, dans mon cas, il était dû au fait que le répertoire actuel du processus de débogage vscode était différent du répertoire dans lequel se trouvait le script. Il est utile de faire un
print('cwd is %s' %(os.getcwd()))
Juste avant votre sys.path.append
et vos importations. Ce qui m'est arrivé, c'est que l'environnement d'exécution cwd semble être par défaut le répertoire de l'espace de travail, qui semble être le répertoire contenant le fichier de projet vs code, et si ce n'est pas là où se trouve votre script, alors vos chemins d'inclusion relatifs sont rompus.
Une solution à cela est de vous assurer que votre script change son répertoire actuel dans le répertoire où se trouve le script, et également d'ajouter votre syspath au répertoire où se trouve le script:
scriptdir = os.path.dirname(os.path.realpath(__file__))
print('dir containing script is %s' % (scriptdir))
# append our extra module directory (in this case Autogen) onto the script directory
sys.path.append(os.path.join(scriptdir, 'Autogen'))
# also change cwd to where the script is located (helps for finding relative files)
print('============\ncwd is %s' %(os.getcwd()))
os.chdir(scriptdir)
print('============\ncwd after change to script dir is %s' %(os.getcwd()))
Toutes les étapes ci-dessus aideront à faire fonctionner correctement votre script, mais elles ne contribueront pas à l'intellisense ou à l'achèvement du code. Pour que l'exécution du code s'exécute correctement, vous devez créer un .env
fichier (généralement dans le même répertoire que votre répertoire .vscode) et dans votre fichier .env vous ajoutez les répertoires où vous voulez que vscode recherche des modules supplémentaires python
Contenu du fichier .env
PYTHONPATH="someDirRelativeTowhereYourVSCodeProjectLives\\Autogen"
Dans mon cas, cela n'a rien à voir avec
"env": {"PYTHONPATH": "${workspaceRoot}"}
Voici ma structure de dossier/module:
/Dev/csproj/deploy/test.py
/Dev/csproj/util/utils.py
et dans test.py, il importe la fonction utils
import sys
sys.path.append('../')
from util.utils import get_keyvault_secret
Il n'a aucun problème si j'exécute test.py dans le dossier terminal/Dev/csproj/deploy /.
Mais si je veux déboguer test.py, j'ai eu l'exception de "ModuleNotFoundError"
Pour le corriger, j'ajoute ceci à ma configuration de débogage launch.json
"cwd": "${workspaceRoot}\\Dev\\csproj\\deploy",