Mojo中集成Python详解及问题说明

官方的长期目标是让 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(</
  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

启航学途

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值