最近开始看《机器学习实战》这本书,这本书里面是用python实现了一些基本的算法,因此,首先需要搭建好python的开发环境。

一.相关版本

我的电脑:win8 64位

python版本:python-2.7.5.amd64?

Numpy函数库版本:www.hack95.com-amd64-py2.7

python插件版本:www.hack95.com-amd64-py2.7

VS版本:VS2010

二.搭建流程

1.安装python

下载地址:

http://www.hack95.com/ftp/python/2.7.5/python-2.7.5.amd64.msi

2.安装Numpy函数库

下载地址:http://www.hack95.com/s/13T2mM

3.安装针对VS2010的python插件

下载地址:http://www.hack95.com/soft/23586.html

4.打开VS2010,创建新工程,选择其他语言-python,再创建控制台程序即可。

VS2010下,C++调用python的环境,基于Python3.6.8-win32位

前言Miniconda的安装Miniconda虚拟环境配置VS2010环境配置(基于Win32平台)

前言

配置Theano + Scipy + Python + VS2010 C++ 开发环境。 由于单位开发环境较老,使用的是VS2010的Win32平台开发,因此考虑到32位与64位不能兼容,使c++能正确调用Python,踩遍CSDN上的坑,若开发环境为64位基本操作差不多,不过时刻牢记Python位数与C++环境位数应该对应相同才能互相调用。

总结如下工作配置环境流程:

Miniconda的安装Miniconda虚拟环境配置VS2010环境配置(基于Win32平台)

Miniconda的安装

之所以选择Miniconda而不是Anaconda,不外乎是32位的考虑,安装32位miniconda对应python版本即为32位,不用过多考虑其他问题,链接:Miniconda官网。

下载安装时不推荐添加到环境变量,这样可以使conda的环境与现有Python环境分开,虽然不方便使用,但是便于管理。安装完成会有对应Anaconda Prompt(miniconda)的命令行快捷方式生成。

Miniconda虚拟环境配置

打开Prompt命令行,输入命令创建新的python环境: conda create -n your_env_name python=3.6.8 不是所有Python都有32位版本,华为开源Python镜像可以查询对应版本是否有32位(结尾是Win32即为32位)。

如果觉得安装慢,需要添加源,这里选择Anaconda清华源。

搜索电脑里有没有 .condarc 文件,有则点开编辑;无则命令行输入conda config --set show_channel_urls yes即可生成对应文件;文件打开粘贴如下内容即可。

channels:

- defaults

show_channel_urls: true

channel_alias: https://www.hack95.com/anaconda

default_channels:

- https://www.hack95.com/anaconda/pkgs/main

- https://www.hack95.com/anaconda/pkgs/free

- https://www.hack95.com/anaconda/pkgs/r

- https://www.hack95.com/anaconda/pkgs/pro

- https://www.hack95.com/anaconda/pkgs/msys2

custom_channels:

conda-forge: https://www.hack95.com/anaconda/cloud

msys2: https://www.hack95.com/anaconda/cloud

bioconda: https://www.hack95.com/anaconda/cloud

menpo: https://www.hack95.com/anaconda/cloud

pytorch: https://www.hack95.com/anaconda/cloud

simpleitk: https://www.hack95.com/anaconda/cloud

安装会加速很多很多。创建完成后安装想要的包即可,这里为了神经网络安装: 激活环境:conda activate your_env_name 安装Scipy:conda install scipy 安装机器学习库Theano:conda install theano

VS2010环境配置(基于Win32平台)

本机Minicodna安装在E:\miniconda下,虚拟环境则在该目录的env目录下,假设创建的虚拟环境为py36,那么对应虚拟环境路径为 E:\miniconda\envs\py36

公司环境为VS2010,Win32,创建项目选对应的: 创建成功后上方应显示 Debug 和 Win32。 右键项目,点击最下方属性,弹出属性页: ① 添加附加包目录:E:\miniconda\envs\py36\include; ②添加附加库目录: E:\miniconda\envs\py36\libs; ③添加Python36_d.lib debug模式下需要python36.lib的debug版本python36_d.lib,复制粘贴重命名为python36_d.lib即可。 ④复制Python36.dll python36.lib链接着python36.dll,经常会因为找到了lib文件找不到dll文件报错,复制python环境目录下的(既E:\miniconda\envs\py36)python36.dll ,粘贴到项目的debug目录下即可。 ⑤再不放心 现在在CPP中#include "Python.h""已经不会找不到库,为保险起见,在程序中再设置个PythonHome,本机中数据类型不一样导致不能直接传Char[ ]进Py_SetPythonHome() , 因此定义个wchar_t[]才能正确传递地址进去,不会报错。

#include "stdafx.h"

#include "Python.h"

int main()

{

wchar_t wszStr[] = L"E:\\miniconda\\envs\\py36";

Py_SetPythonHome(wszStr);

Py_Initialize();

PyRun_SimpleString("import os");

PyRun_SimpleString("import sys");

PyRun_SimpleString("sys.path.append('.')");

PyRun_SimpleString("from hello import *");

PyRun_SimpleString("print_hello()");

Py_Finalize();

system("pause");

return 0;

}

再有其他错误基本上也是python少个包什么的,直接安装就好,debug弹出的窗口会告诉问题出在哪里。

1、? 安装python3.7

2、? Vs2010中配置python:

3、添加头文件:#include

4、问题:error LNK2001: 无法解析的外部符号 __imp__Py_Initialize@0

原因: 由于Python版本和项目编译版本不匹配导致这个问题,本文出错的原因是

解决: 1. 使用 Python x86版本,VS项目更改为Win32,包含目录及库目录一律为Python x86,可正常编译

2.?使用 Python x64版本,通过配置管理器,在活动解决方案平台中新建X64平台,包含目录及库目录一律为Python x64,可正常编译

5、问题:error MSB6006:"CL.exe"已退出,代码为5

解决:在更改VC++目录时,改每个目录要注意把下面的“从父级或项目默认设置继承”勾选上。

VS调用python常用接口:

void Py_Initialize(void)

初始化Python解释器,如果初始化失败,继续下面的调用会出现各种错误,可惜的是此函数没有返回值来判断是否初始化成功,如果失败会导致致命错误。

int Py_IsInitialized(void)

检查是否已经进行了初始化,如果返回0,表示没有进行过初始化。

void Py_Finalize()

反初始化Python解释器,包括子解释器,调用此函数同时会释放Python解释器所占用的资源。

int PyRun_SimpleString(const char *command)

实际上是一个宏,执行一段Python代码。

PyObject* PyImport_ImportModule(char *name)

导入一个Python模块,参数name可以是*.py文件的文件名。类似Python内建函数import。

PyObject* PyModule_GetDict( PyObject *module)

相当于Python模块对象的dict属性,得到模块名称空间下的字典对象。

PyObject* PyRun_String(const char* str, int start,PyObject* globals, PyObject* locals)

执行一段Python代码。

int PyArg_Parse(PyObject* args, char* format, …)

把Python数据类型解析为C的类型,这样C程序中才可以使用Python里面的数据。

PyObject* PyObject_GetAttrString(PyObject *o, char*attr_name)

返回模块对象o中的attr_name 属性或函数,相当于Python中表达式语句,o.attr_name。

PyObject* Py_BuildValue(char* format, …)

和PyArg_Parse刚好相反,构建一个参数列表,把C类型转换为Python对象,使得Python里面可以使用C类型数据。

PyObject* PyEval_CallObject(PyObject* pfunc, PyObject*pargs)

此函数有两个参数,而且都是Python对象指针,其中pfunc是要调用的Python 函数,一般说来可以使用PyObject_GetAttrString()获得,pargs是函数的参数列表,通常是使用Py_BuildValue()来构建。