mxnet底层的代码是cpp写的, 然后在它上面封装提供了R, python, scala和matlab的接口. 我现在只关注python.

如何使用mxnet的python接口?

自然是通过import来实现了.

import mxnet as mx

但是import之前必须先把mxnet/python路径加到search path里.

至少有三种方式可以实现.

  1. python代码手动加载
import os, sys;
cur_path = os.path.abspath(os.path.dirname(__file__));
mxnet_lib_path = os.path.join(cur_path, 'mxnet/python');
sys.path.append(mxnet_lib_path);
import mxnet as mx;
  1. 将路径加到环境变量PYTHONPATH中. 修改~/.bashrc文件, 在最后面加上:
export PYTHONPATH=path_to_mxnet_root/python

保存后执行:

source ~/.bashrc
  1. 直接安装, 将mxnet变成全局的.
python setup.py install --user

那么运行这行命令时发生了什么事情呢?

它在~/.local创建了一个lib文件夹, 里面有一个python-2.7/site-packages文件夹. 如果是使用sudo执行:

sudo python setup.py install

那么这个文件夹则在/usr/lib下面. 这个site-packages文件夹里包含的mxnet.xx.x.egg文件夹类似于java里的jar包. 进去后可以看到里面包含了mxnet的动态库和python库脚本.

site-packages文件夹里的包是可以直接使用的, 因为它已经被自动加到了sys.path变量里.

mxnet的mnist测试案例为什么可以在执行python setup.py之前正常运行?

在mxnet的installation guidance里, 它是先说可以执行mnist测试脚本, 然后再执行setup.py. 一开始还以为它写错了. 今天仔细看了看,

python example/image-classification/train_mnist.py --network lenet --gpus 0

train_mnist.py里的第一行为:

import find_mxnet

而find_mxnet.py的内容是:

try:
import mxnet as mx
except ImportError:
import os, sys
curr_path = os.path.abspath(os.path.dirname(__file__))
sys.path.append(os.path.join(curr_path, "../../python"))
import mxnet as mx

也就是说, 在运行setup.py之前执行这个测试案例时, 它是通过上面说的第一种途径导入mxnet包的.

python 接口层是怎样与cpp代码衔接起来的?

mxnet python 里提供的大部分接口方法都不是在python中直接定义, 而是通过类似于注入的方式将cpp代码中定义好的方法复制到python对象里. 那么这个过程是什么时候, 在哪里完成的呢?

在io.py里有_init_io_module()方法, 它将mxnet.so中的data iterator都取出来, 然后作为属性赋给对应的python对象: mx.io. 其他一些需要调用底层cpp方法的接口, 应该也是通过这种办法与cpp代码衔接起来的, 如symbol.py里对应的也有_init_symbol_module()方法.

那么, 这个注入的过程是什么时候发生的呢? 第一次import相应的模块时发生, 通过执行对应的_init_xxx_module()方法.

mxnet的python包导入的前前后后的更多相关文章

  1. python 包导入规则

    python 包导入规则,恶心了一天,终于搞清楚了 1.目录 speed data __init__.py __init__.py static templates view __init__.py ...

  2. 【转】python包导入细节

    [转]python包导入细节 包导入格式 导入模块时除了使用模块名进行导入,还可以使用目录名进行导入.例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以 ...

  3. python包导入细节

    包导入格式 导入模块时除了使用模块名进行导入,还可以使用目录名进行导入.例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以使用下面这种方式导入这个模块. ...

  4. Python 包导入

    首先我们先了解下python中寻找模块的顺序 是否是内建模块 ->主目录 ->PYTHONPATH环境变量 ->标准库 -> 首先判断这个model是否是built-in,即内 ...

  5. python包导入

    https://www.cnblogs.com/foremostxl/p/9501663.html

  6. 将python包发布到PyPI和制作whl文件

    参考链接:wheel和egg的不同怎样将自己写的包传达到PyPi发布你自己的轮子 - PyPI打包上传实践PyPI官网上传包教程 wheel文件Wheel和Egg都是python的打包格式,目的是支持 ...

  7. Python 包的相对导入讲解

    [Python 包的相对导入讲解] 参考:http://www.dai3.com/python-import.html

  8. Python 学习 第十五篇:模块搜索路径和包导入

    在导入自定义的模块时,除了指定模块名之外,也需要指定目录,由于Python把目录称作包,因此,这类导入被称为包导入.包导入把计算机上的目录变成Python的命名空间,而目录中所包含的子目录和模块文件则 ...

  9. python之块包导入

    一.模块 1.什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写 ...

随机推荐

  1. 面试题:return和finally执行

    Demo类: public class Demo { public int get() { int x=1; try { x++; return x; }finally{ ++x; } } } Tes ...

  2. 2016年秋季的我,work with hololens

  3. 利用T-Sql语句中的二重循环打印乘法口诀表

    --定义三个初始化变量 declare @a int,@b int,@c varchar(200) --对@a进行赋值 set @a=1 --循环输出9次,@a为被乘数 while(@a<=9) ...

  4. [No000030]程序员节发点别的:中国教育整个把人脑子搞坏了-易中天

    导读 在易中天看来,中国教育和中国文化的问题一样,是弱智化.搞坏的原因是什么?是我们的教育评价目标就是"成王败寇"四个字.他明确提出反对励志,反对培优,反对成功学,反对望子成龙.他 ...

  5. 内裤:DataTable转Model

    public class ConvertHelper<T> where T : new() { /// <summary> /// 利用反射和泛型 /// </summa ...

  6. grunt-contrib-uglify压缩插件的常用配置属性

    mangle:false(不混淆变量名和方法名,保留原有的名字),如果不配置,默认混淆,就是将所有方法名和变量都用a,b,c等字母替换 preserveComments : 'all'(不删除注释,还 ...

  7. ONS C++ Windows SDK 调试方法及注意事项

    此文将展示ONS C++ Windows SDK 整个调试过程,笔者直接使用sdk包中的example消息发送示例代码,开发环境为win7, 64位,Visual Studio Professiona ...

  8. Java的jar文件安装成windows 服务

    Java的jar文件安装成windows 服务: 1.下载:nssm,复制到jar文件目录下 2. jar文件目录下创建bat文件[run.bat],内容为[java -jar 文件名.jar] 3. ...

  9. jdbc连接数据库总结

    jdbc支持多种数据库,比如说oracle, mysql, mssql,现在总结一下连接各种数据库的相关知识 1,mysql连接,代码如下 Class.forName("com.mysql. ...

  10. C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 导入导出Microsoft Excel 2010的例子

    1:能支持多种Excel版本,早期的.现在的版本都支持.2:能导入.3:能导出.4:有简单的例子可以参考.