官方的长期目标是让 Mojo 成为Python 的超集(即让 Mojo 与现有的 Python 程序兼容)。Python 程序员应该能够立即使用 Mojo,并能够访问当今庞大的 Python 包生态系统。
然而,Mojo 仍处于早期开发阶段,许多 Python 功能尚未实现。目前,您无法在 Mojo 中编写所有可以用 Python 编写的代码。而且 Mojo 还没有自己的软件包生态系统。
为了弥补这一差距,Mojo 允许您从 Mojo 代码导入 Python 模块、调用 Python 函数并与 Python 对象交互。它使用标准 Python 解释器 (CPython) 运行 Python 代码,因此您现有的 Python 代码无需更改。
导入 Python 模块
要在 Mojo 中导入 Python 模块,只需 Python.import_module() 使用模块名称调用:
from python import Python
fn use_array() raises:
# This is equivalent to Python's `import numpy as np`
var np = Python.import_module("numpy")
# Now use numpy as if writing in Python
var array = np.array([1, 2, 3])
print(array)
def main():
use_array()
输出:
[1 2 3]
是的,这会导入 Python NumPy,并且您可以导入 已安装的任何其他 Python 模块。
需要注意以下几点:
-
目前,您无法导入单个成员(例如单个 Python 类或函数)——您必须导入整个 Python 模块,然后通过模块名称访问成员。
-
Mojo 尚不支持顶级代码,因此调用import_module()必须在另一个方法内。这意味着您可能需要多次导入模块或传递对模块的引用。这与 Python 的工作方式相同:多次导入模块不会多次运行初始化逻辑,因此您不会付出任何性能损失。
-
import_module()可能会引发异常(例如,如果模块未安装)。如果您在函数内部使用它fn,则需要处理错误(使用子句try/except),或者将raises关键字添加到函数签名中。在调用可能引发异常的 Python 函数时,您也会看到这一点。(在 Python 代码中引发异常比在 Mojo 标准库中更常见,这 出于性能原因限制了它们的使用。)
Mojo 在运行时加载 Python 解释器和 Python 模块,因此无论您在何处运行 Mojo 程序,它都必须能够访问兼容的 Python 解释器,并找到任何导入的 Python 模块。
导入本地 Python 模块
如果您有一些想要在 Mojo 中使用的本地 Python 代码,只需将目录添加到 Python 路径,然后导入模块。
例如,假设您有一个名为的 Python 文件mypython.py:
文件名:mypython.py
import numpy as np
def gen_random_values(size, base):
# generate a size x size array of random numbers between base and base+1
random_array = np.random.rand(size, size)
return random_array + base
以下是如何导入并在 Mojo 文件中使用它的方法:
main.mojo
from python import Python
fn main() raises:
Python.add_to_path("path/to/module")
var mypython = Python.import_module(</
标签:Python,导入,详解,模块,import,array,Mojo
From: https://blog.csdn.net/j610152753/article/details/140905385