基本上有一个名为的文件8puzzle.py
,我想将该文件导入另一个文件(在同一文件夹中,因为提供了该文件,所以无法更改文件名)。无论如何,在Python中可以做到这一点吗?我尝试了通常的方式from 8puzzle import *
,这给了我一个错误。
错误是:
>>> import 8puzzle
File "<input>", line 1
import 8puzzle
^
SyntaxError: invalid syntax
>>>
基本上有一个名为的文件8puzzle.py
,我想将该文件导入另一个文件(在同一文件夹中,因为提供了该文件,所以无法更改文件名)。无论如何,在Python中可以做到这一点吗?我尝试了通常的方式from 8puzzle import *
,这给了我一个错误。
错误是:
>>> import 8puzzle
File "<input>", line 1
import 8puzzle
^
SyntaxError: invalid syntax
>>>
8puzzle.py
到puzzle8.py
和使用import puzzle8
。
Answers:
上面的答案是正确的,但是到目前为止,推荐的方法是使用import_module
function:
importlib.import_module(name, package=None)
导入模块。name参数以绝对或相对术语(例如pkg.mod
或..mod
)指定要导入的模块。如果使用相对术语指定名称,则必须将package参数设置为要用作解析包名称的锚点的包的名称(例如,import_module('..mod', 'pkg.subpkg')
importpkg.mod
)。import_module()函数充当的简化包装
importlib.__import__()
。这意味着该函数的所有语义均源自importlib.__import__()
。这两个函数之间最重要的区别是,import_module()
返回指定的包或模块(例如pkg.mod
),而__import__()
返回顶级包或模块(例如pkg
)。如果要动态导入自解释程序开始执行以来创建的模块(例如,创建了Python源文件),则可能需要调用
invalidate_caches()
以便导入系统注意到新模块。
__import__
现在不推荐。
importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0)
内置__import__()
功能的实现。注意应该以编程方式导入模块,
import_module()
而不要使用此功能。
an_imported_file = importlib.import_module('13_file')
,那我就做不了from an_imported_file import var_x
。有什么办法可以做到这一点?
/usr/local/bin/python3.7 "/Users/constan/Desktop/2_COData/1_PYTHON /CODEX/13_Spacy/children.py" Traceback (most recent call last): File "/Users/constan/Desktop/2_COData/1_PYTHON /CODEX/13_Spacy/children.py", line 7, in <module> from an_imported_file import var_x ModuleNotFoundError: No module named 'an_imported_file'
不要.py
在导入中使用扩展名。
有from 8puzzle import *
工作吗?
就其价值而言,from x import *
不是首选的Python模式,因为它会将模块的命名空间渗入当前上下文中。
通常,尝试从该模块导入您特别想要的东西。可以从其他模块导入任何全局变量。
例如,如果可以的8puzzle.foo
话,可以从8puzzle导入
虽然我的.py
信息是正确的,但这还不够。
另一个张贴者的__import__('8puzzle')
建议是正确的。但是,我强烈建议您避免使用此模式。
首先,它保留了内部私有Python方法。 您基本上打破了能够导入模块意味着什么的基本假设。 只需将文件重命名为其他名称即可puzzle8
解决此问题。
这将使经验丰富的Python程序员感到沮丧,他们希望知道您导入的内容最重要,并且期望代码(尝试)符合PEP8。
from 8puzzle import *
然后我编辑了原始问题。就像mvanveen所说的那样,它是行不通的。