Fondamentalement, quand j'ai un fichier python comme:
python-code.py
et utilise:
import (python-code)
l'interpréteur me donne une erreur de syntaxe.
Des idées pour y remédier? Les tirets sont-ils illégaux dans les noms de fichiers Python?
Vous devriez consulter PEP 8 , le guide de style pour le code Python:
Noms de package et de module Les modules doivent avoir des noms courts, entièrement en minuscules. Des traits de soulignement peuvent être utilisés dans le nom du module si cela améliore la lisibilité. Les packages Python doivent également avoir des noms courts, entièrement en minuscules, bien que l'utilisation de traits de soulignement soit déconseillée.
Puisque les noms de module sont mappés aux noms de fichiers et que certains systèmes de fichiers sont insensibles à la casse et tronquent les noms longs, il est important que les noms de module soient choisis pour être assez courts - ce ne sera pas un problème sous Unix, mais cela peut être un problème lorsque le code est transporté vers d'anciennes versions Mac ou Windows, ou DOS.
En d'autres termes: renommez votre fichier :)
ops-scripts
et savoir qu'ils ne peuvent pas être importés en utilisant une approche d'espace de noms de package normale. Ou un seul script pourrait être nomméstop-website.py
pour un effet similaire. N'importe lequel de ceux-ci pourrait toujours être importé viarunpy
et d'autres méthodes bien sûr, mais cela permet d'éviter certaines erreurs courantes.cgi-bin
dossier (en faisant des tests unitt sur eux), ce qui est assez standard. Sauf si vous avez un cas rare comme celui-ci, renommez définitivement votre module si vous en avez le contrôle.Une autre chose à noter dans votre code est que l'importation n'est pas une fonction. Il
import(python-code)
devrait en être de mêmeimport python-code
qui, comme certains l'ont déjà mentionné, est interprété comme "importer du code python moins", pas ce que vous vouliez. Si vous avez vraiment besoin d'importer un fichier avec un tiret dans son nom, vous pouvez faire ce qui suit:Mais, comme mentionné ci-dessus, ce n'est pas vraiment recommandé. Vous devriez changer le nom du fichier si c'est quelque chose que vous contrôlez.
la source
TLDR
Les tirets ne sont pas illégaux mais vous ne devez pas les utiliser pour 3 raisons:
Si vous devez absolument importer un nom de fichier avec un tiret, la syntaxe spéciale est la suivante:
Curieux de savoir pourquoi nous avons besoin d'une syntaxe spéciale?
La raison de la syntaxe spéciale est que lorsque vous écrivez,
import somename
vous créez un objet module avec un identificateursomename
(vous pourrez donc l'utiliser plus tard avec par exemplesomename.funcname
). Bien sûrmodule-name
n'est pas un identifiant valide et donc la syntaxe spéciale qui en donne un valide.Vous ne comprenez pas pourquoi le nom du module n'est pas un identifiant valide?
Ne vous inquiétez pas, moi non plus. Voici une astuce pour vous aider: Regardez cette ligne python:
x=var1-var2
. Voyez-vous une soustraction sur le côté droit de l'affectation ou un nom de variable avec un tiret?PS
Rien d'original dans ma réponse, sauf d'inclure ce que je considérais comme les informations les plus pertinentes de toutes les autres réponses en un seul endroit
la source
psycopg2_binary = import_module('psycopg2-binary')
. Erreur =>ModuleNotFoundError: No module named 'psycopg2-binary'
. Maispsycopg2-binary
est installé. Je ne sais pas comment l'inclure.Le problème est que ce
python-code
n'est pas un identifiant. L'analyseur voit cela commepython
moinscode
. Bien sûr, cela ne fera pas ce que vous demandez. Vous devrez utiliser un nom de fichier qui est également un identifiant Python valide. Essayez de remplacer le-
par un trait de soulignement.la source
Vous pourriez probablement l'importer via un
__import__
piratage, mais si vous ne savez pas déjà comment, vous ne devriez pas. Les noms de module Python doivent être des noms de variables valides ("identificateurs") - cela signifie que si vous avez un modulefoo_bar
, vous pouvez l'utiliser depuis Python (print foo_bar
). Vous ne pourriez pas le faire avec un nom étrange (print foo-bar
-> erreur de syntaxe).la source
Sur Python 3, utilisez import_module :
Plus généralement,
la source
Bien
python-code
qu'un nom de fichier approprié soit la meilleure solution, si ce n'est pas sous notre contrôle, un piratage__import__
est préférable à la copie, au changement de nom ou à la manipulation du code d'autres auteurs. Cependant, j'ai essayé et cela n'a pas fonctionné sauf si j'ai renommé le fichier en ajoutant l'.py
extension. Après avoir regardé la documentation pour savoir comment obtenir une description.py
, je me suis retrouvé avec ceci:Il a créé un nouveau fichier
python-codec
lors de la première exécution.la source