首页 > 编程语言 >Mojo中集成Python详解及问题说明

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

时间:2024-08-05 21:25:53浏览次数:15  
标签:Python 导入 详解 模块 import array Mojo

官方的长期目标是让 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

相关文章

  • Mojo 不安全指针 详解
    该UnsafePointer类型创建对内存中某个位置的间接引用。您可以使用UnsafePointer来动态分配和释放内存,或指向由其他代码分配的内存。您可以使用这些指针编写与低级接口交互的代码,与其他编程语言交互,或构建某些类型的数据结构。但顾名思义,它们本质上是不安全的。例如,当使用不......
  • kubernetes-存储卷与持久化详解
    目录背景volume介绍emptyDirHostPathNFSconfigMapSecretPersistentVolume介绍PV回收策略PV访问策略基于nfs或nas创建pv创建hostpath类型的pvPV的状态PersistentVolumeClaim创建pvc与pv进行绑定使用pvc动态存储storageclass创建目录nfs添加授权目录创建yaml背景容器部署过程中一......
  • VulnhubJANGOW靶机详解
    项目地址https://www.vulnhub.com/entry/jangow-101754/部分vmware有配置问题,需要修改网卡信息,重启dhcp服务1.在系统启动时(长按shift键)直到显示以下界面选择第二个,按回车继续选择第二个2.按e进入编辑,进入以下界面删除"recoverynomodeset"并在末尾添加"quiets......
  • python图表没有正确显示中文,这通常是因为matplotlib的默认设置不支持中文字符,或者相应
    如果图表没有正确显示中文,这通常是因为matplotlib的默认设置不支持中文字符,或者相应的字体没有正确加载。你可以通过指定支持中文的字体来解决这个问题。下面是如何设置matplotlib以确保能够在图表中显示中文的步骤:方法1:全局设置字体你可以修改matplotlib的全局配置,使......
  • 在python jupyter下运行cuda c++程序
    Installrunthisonjupyter(*.ipynb)files!pip3installnvcc4jupyterUsageloadtheextensiontoenablethemagiccommands:%load_extnvcc4jupyterRuncudatest%%cuda#include<stdio.h>__global__voidhello(){printf("Hellofromblock......
  • linux运维一天一个shell命令之vim详解
    前言:在日常运维工作中,掌握好Vim的使用可以极大地提高工作的效率。Vim作为一个强大的文本编辑器,广泛应用于各种运维场景一、定义Vim是一个非常强大的文本编辑器,在Unix/Linux环境中非常流行。它具有许多高级功能和快捷键,适合编写代码、编辑配置文件等。1、特点:高级......
  • 在python jupyter下运行cuda c++程序
    Installrunthisonjupyter(*.ipynb)files!pip3installnvcc4jupyterUsageloadtheextensiontoenablethemagiccommands:%load_extnvcc4jupyterRuncudatest%%cuda#include<stdio.h>__global__voidhello(){printf("Hellofromblock......
  • SciTech-Mathmatics-ImageProcessing-Remove the Background from an image using Pyt
    https://www.geeksforgeeks.org/how-to-remove-the-background-from-an-image-using-python/pipinstallPillowpipinstallrembg#ImportingRequiredModulesfromrembgimportremovefromPILimportImage#Storepathoftheimageinthevariableinput_......
  • iOS订阅详解
    1.进入管理后台点击订阅、然后新建一个组2.然后往组里面添加数据、可以编辑组里面订阅服务的等级、1代表最高等级、拖动可以改变相应的等级、无法自己指定等级、系统会根据拖动自动生成等级升级用户切换为更高等级的订阅。用户需先支付更高等级的订阅费用,支付成功后,订......
  • python 发送buffer类型数据, 发送octet-stream类型数据, 发送Uint8Array类型数据
       #-*-coding:utf-8-*-#@Time:2024/7/3120:20#@Author:Dragonjs_code=r"""commonjsGlobal={};varprotobuf_min={exports:{}};(function(module){!function(g){varr2,e2,i2;r2={1......