Fondamentalement, il existe un fichier appelé 8puzzle.py
et je souhaite importer le fichier dans un autre fichier (dans le même dossier et je ne peux pas changer le nom du fichier car le fichier est fourni). Est-il possible de le faire en Python? J'ai essayé de façon habituelle from 8puzzle import *
, cela me donne une erreur.
L'erreur est:
>>> import 8puzzle
File "<input>", line 1
import 8puzzle
^
SyntaxError: invalid syntax
>>>
Vous pourriez faire
puzzle = __import__('8puzzle')
Problème très intéressant. Je me souviendrai de ne rien nommer avec un numéro.
Si vous souhaitez import *
- vous devriez consultez cette question et réponse .
Les réponses ci-dessus sont correctes, mais pour l'instant, la méthode recommandée consiste à utiliser la fonction import_module
:
importlib.import_module(name, package=None)
Importez un module. L'argument nom spécifie le module à importer en termes absolus ou relatifs (par exemple,pkg.mod
Ou..mod
). Si le nom est spécifié en termes relatifs, l'argument package doit être défini sur le nom du package qui doit servir d'ancrage pour la résolution du nom du package (par exempleimport_module('..mod', 'pkg.subpkg')
importerapkg.mod
).La fonction import_module () agit comme un wrapper simplifiant autour de
importlib.__import__()
. Cela signifie que toute la sémantique de la fonction est dérivée deimportlib.__import__()
. La différence la plus importante entre ces deux fonctions est queimport_module()
renvoie le package ou module spécifié (par exemplepkg.mod
), Tandis que__import__()
renvoie le package ou module de niveau supérieur ( par exemplepkg
).Si vous importez dynamiquement un module créé depuis le début de l'exécution de l'interpréteur (par exemple, créé un Python), vous devrez peut-être appeler
invalidate_caches()
pour que le nouveau module à remarquer par le système d'importation.
__import__
n'est pas recommandé maintenant.
importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0)
Une implémentation de la fonction__import__()
intégrée.Remarque L'importation programmatique de modules doit utiliser
import_module()
au lieu de cette fonction.
N'utilisez pas l'extension .py
Dans vos importations.
from 8puzzle import *
Fonctionne-t-il?
Pour ce qu'il vaut, from x import *
N'est pas un modèle Python préféré, car il insère l'espace de noms de ce module dans votre contexte actuel.
En général, essayez d'importer ce que vous voulez spécifiquement de ce module. N'importe quel global de l'autre module peut être importé.
par exemple, si vous avez 8puzzle.foo
vous pouvez faire `à partir de l'importation 8puzzle
Bien que mon message .py
Soit correct, il n'est pas suffisant.
La suggestion __import__('8puzzle')
de l'autre affiche est correcte. Cependant, je recommande fortement d'éviter ce modèle .
D'une part, il est réservé une interne Python. Vous brisez fondamentalement les hypothèses fondamentales de ce que signifie pouvoir importer un module. Simplement renommer le fichier en quelque chose d'autre, comme puzzle8
, y remédiera.
Cela frustrera l'enfer des programmeurs expérimentés Python qui s'attendent à savoir quelles sont vos importations au sommet et s'attendent à ce que le code (essaye) de se conformer à PEP8 .