python导包顺序_mxnet的python包导入的前前后后

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

如何使用mxnet的python接口?

自然是通过import来实现了.

import mxnet as mx

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

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

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;

将路径加到环境变量PYTHONPATH中. 修改~/.bashrc文件, 在最后面加上:

export PYTHONPATH=path_to_mxnet_root/python

保存后执行:

source ~/.bashrc

直接安装, 将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()方法.

python 包导入规则

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

【转】python包导入细节

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

python包导入细节

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

Python 包导入

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

python包导入

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

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

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

Python 包的相对导入讲解

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

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

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

python之块包导入

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

随机推荐

帮我做个APP,给你20万,做不做?

一.为什么要写这篇文章 前段时间,有个辞职 创业的同事(做法务的)  问我 开发一个 新闻类的APP要多少钱,产品.UI.接口.后台管理页  他们啥都没有,想全部外包. 我 并没有在外包公司做过,也没 ...

web.xml中在Servlet中获取context-param和init-param内的参数

引自:http://blog.csdn.net/yakson/article/details/9203231 web.xml里面可以定义两种参数:1.application范围内的参数,存放在serv ...

你眼中的async/await是什么样的?

又到了周末的code review环节,这次code review发现了一个对async/await的理解问题.让我们直奔主题: var foodsSearch = new FoodSearchSer ...

深入理解KMP算法

前言:本人最近在看字符串模式匹配算法的内容,但是看得很迷糊,这本书中这块的内容感觉基本是严蔚敏的一个翻版,此书中给出的代码实现确实非常精炼,但是个人 ...

Laravel Container分析

在分析Laravel流程具体细节之前我们先来了解一下它的Container容器,容器的作用简单的说就是用来存储对象(类名称或者实例),包括提供一些生成对象实例的方法. 我们查看Illuminate\C ...

JavaScript及其异步实现

由于javascript本身是单线程模型,这里主要通过Callbacks,Listeners,Control Flow Libraries ,Promises四种方式来实现异步操作. Referenc ...

Maven使用常见问题整理

Maven使用常见问题整理  1.更新eclipse的classpath加入新依赖  1.在dependencyManagement里面加入包括版本在内的依赖信息,如:  

IPhone 设备状态、闪光灯状态

//判断闪光灯状态,修改默认的"CameraFlashOff" 按钮图片.转由 TGCameraFlash.m 控制图标切换    AVCaptureDevice *device ...

apidoc快速生成在线文档,apidoc生成静态文件的生成规则以及原理分析

在老大的指引下,需要将系统的json文件格式转换成apidoc的json格式,也就是json格式的重组,但是这个apidoc的生成格式是不固定的,因为apidoc有自己一套的生成规则,我需要研究一下是 ...

iOS ----------NSDate 、CFAbsoluteTimeGetCurrent、CACurrentMediaTime 的区别

框架层: NSDate 属于Foundation CFAbsoluteTimeGetCurrent() 属于 CoreFoundatio CACurrentMediaTime() 属于 QuartzC ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值