本文并不给出“编写一个c++代码,然后编译为.so文件,然后在python中引入”的hello world,需要的请参考:http://www.oschina.net/question/437227_124449

本文意在强调,python的import,引入的不仅是.py(以及.pyc)文件,还可以引入.so文件

首先明确下,python的模块,是指:一个包含若干.py文件的目录dir,并且包含一个__init__.py(内容可以为空,但不能不存在这个文件)

然后,当你需要使用这个目录dir下的某个文件some.py,那就这样引入:

import dir.some

以及,还可以用更复杂的from xx import yy这种语法。

那么这个import是按照什么路径查找的?上面这个import dir.some是从相对路径(当前路径)查找,有时候还有import cv2这种用法。其实是从python内部的sys.path中查找的。当然,你想添加新的目录到“查找目录”中,要么在python代码中往sys.path上追加东西,要么在shell里设定PYTHONPATH包含你所需要的目录。增加到PYTHONPATH的会放到sys.path中。

比如,我的sys.path

可以发现,/usr/lib/python2.7/dist-packages包含在sys.path中。而import cv2所引入的cv2所在路径为/usr/lib/python2.7/dist-packages/cv2.86_64-linux-gnu.so`。咦,怎么不是cv.py呢?总之,在sys.path包含的目录下,找到的不仅仅是.py和.pyc文件,还有众多的.so文件。而且,大都可以引入(import)

所以,要明确一点:import xxx引入的不仅仅是.py(c)文件,还可以是.so文件

================= 分割线 ================

好了,现在应该可以知道,在py-faster-rcnn中,caffe-fast-rcnn/python/caffe/pycaffe.py文件第13行, from ._caffe import SGDSolver 是啥意思,一目了然:将当前目录下_caffe.so引入(也就是caffe-fast-rcnn/python/caffe/_caffe.so)。

另:_caffe.socaffe-fast-rcnn/python/CMakeLists.txt中指定的__linkname:

if(NOT HAVE_PYTHON)
message(STATUS "Python interface is disabled or not all required dependencies found. Building without it...")
return()
endif() include_directories(${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} ${Boost_INCLUDE_DIRS})
file(GLOB_RECURSE python_srcs ${PROJECT_SOURCE_DIR}/python/*.cpp) #!! GLOB_RECURSE递归查找,其实只找到一个,${PROJECT_SOURCE_DIR}/python/caffe/_caffe.cpp add_library(pycaffe SHARED ${python_srcs})
target_link_libraries(pycaffe ${Caffe_LINK} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES})
set_target_properties(pycaffe PROPERTIES PREFIX "" OUTPUT_NAME "_caffe")
caffe_default_properties(pycaffe) if(UNIX OR APPLE)
set(__linkname "${PROJECT_SOURCE_DIR}/python/caffe/_caffe.so") #!! _caffe.cpp被链接到_caffe.so文件
add_custom_command(TARGET pycaffe POST_BUILD
COMMAND ln -sf $<TARGET_LINKER_FILE:pycaffe> "${__linkname}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/python/caffe/proto
COMMAND touch ${PROJECT_SOURCE_DIR}/python/caffe/proto/__init__.py
COMMAND cp ${proto_gen_folder}/*.py ${PROJECT_SOURCE_DIR}/python/caffe/proto/
COMMENT "Creating symlink ${__linkname} -> ${PROJECT_BINARY_DIR}/lib/_caffe${Caffe_POSTFIX}.so")
endif() # ---[ Install
file(GLOB files1 *.py requirements.txt)
install(FILES ${files1} DESTINATION python) file(GLOB files2 caffe/*.py)
install(FILES ${files2} DESTINATION python/caffe)
install(TARGETS pycaffe DESTINATION python/caffe)
install(DIRECTORY caffe/imagenet caffe/proto caffe/test DESTINATION python/caffe)

注意到图中关键两行(#!!标出),意思是caffe-fast-rcnn/python/caffe/_caffe.cpp编译成caffe-fast-rcnn/python/caffe/_caffe.so。这之后,就可以用import _caffe引入_caffe.so了。

py-faster-rcnn之python引入_caffe.so的更多相关文章

  1. py faster rcnn+ 1080Ti+cudnn5.0

    看了py-faster-rcnn上的issue,原来大家都遇到各种问题. 我要好好琢磨一下,看看到底怎么样才能更好地把GPU卡发挥出来.最近真是和GPU卡较上劲了. 上午解决了g++的问题不是. 然后 ...

  2. py faster rcnn的lib编译出错问题

    真是好事多磨啊,计算机系统依然是14.04,而cuda依然是8.0,唯一不同的是时间不一样,下载的各种库版本有差别,GPU的driver不一样. 但是这样就出问题了,py-faster rcnn的li ...

  3. faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

    参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...

  4. Faster RCNN代码理解(Python)

    转自http://www.infocool.net/kb/Python/201611/209696.html#原文地址 第一步,准备 从train_faster_rcnn_alt_opt.py入: 初 ...

  5. python引入同一目录下的py文件

    python引入同一目录下的py文件 注意:python2和python3的包内import语法有区别,下面介绍一下python3的包内import语法 例如在admin.py文件中要引入dealco ...

  6. python 版Faster Rcnn

    直接按照官网https://github.com/rbgirshick/py-faster-rcnn上的教程对faster Rcnn进行编译的时候,会发有一些层由于cudnn版本的更新,会报错如下: ...

  7. Faster R-CNN CPU环境搭建

    操作系统: bigtop@bigtop-SdcOS-Hypervisor:~/py-faster-rcnn/tools$ cat /etc/issue Ubuntu LTS \n \l Python版 ...

  8. 如何才能将Faster R-CNN训练起来?

    如何才能将Faster R-CNN训练起来? 首先进入 Faster RCNN 的官网啦,即:https://github.com/rbgirshick/py-faster-rcnn#installa ...

  9. 新人如何运行Faster RCNN的tensorflow代码

    0.目的 刚刚学习faster rcnn目标检测算法,在尝试跑通github上面Xinlei Chen的tensorflow版本的faster rcnn代码时候遇到很多问题(我真是太菜),代码地址如下 ...

随机推荐

  1. ASP.NET CORE配置信息

    做个笔记,原文链接 除了应用 IOptions<T> .Value的方式对配置信息进行全局注册外可以应用的另一个微软给出的组件,需要依赖两个包 Microsoft.Extensions.C ...

  2. 超小Web手势库AlloyFinger原理

    目前AlloyFinger作为腾讯手机QQ web手势解决方案,在各大项目中都发挥着作用. 感兴趣的同学可以去Github看看:https://github.com/AlloyTeam/AlloyFi ...

  3. LinuxMint装JDK和Eclipse

    Linux Mint 装JDK和Eclipse 前言 在尝试了好几个发行版后终于锁定了Linux Mint Cinnamon .那么就得配置好环境了. 这里讲一下JAVA环境,配置JDK和Eclips ...

  4. plist文件、NSUserDefault 对文件进行存储的类、json格式解析

    ========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...

  5. AEAI CRM_v1.5.2升级说明,开源客户关系管理系统

    1.升级说明 本次AEAI CRM升级内容主要是针对数通畅联推出AEAI ECP企业云联平台而升级的,其中对AEAI CRM的各模块进行扩展,同时增加了移动门户版功能及为AEAI ECP提供数据服务接 ...

  6. 关于Oracle表连接

    表连接注意left join on与where的区别: select * from dept; select * from emp; select * from emp a right outer j ...

  7. mysql 5.6.24安装实例

    安装前准备工作: 1)编辑PATH路径 vim /etc/profile PATH=/home/mysql/bin:/home/mysql/lib:$PATH export PATH 2)生效PATH ...

  8. 错误 1 类型“System.Web.Mvc.ModelClientValidationRule”同时存在于“c:\Progra

    问题如图: 解决办法: step1: 首先关闭你应用程序方案,在你保存项目的文件夹下找到ProjectName.csproj  ProjectName是你实际的应用程序名称. step2: 用文字编辑 ...

  9. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  10. zabbix 3.0.3 (nginx)安装过程中的问题排错记录

    特殊注明:安装zabbix 2.4.8和2.4.6遇到2个问题,如下:找了很多解决办法,实在无解,只能换版本,尝试换(2.2.2正常 | 3.0.3正常)都正常,最后决定换3.0.3 1.Error ...