python项目开发文档
- 格式:docx
- 大小:100.23 KB
- 文档页数:6
一、将python源程序打包,其他人可以通过easy-install或者install
命令进行安装。
我们首先编写一个简单的python模块foo.py,源码如下:
class MyClass:
def__init__(self):
self.blog = ""
def printblog(self):
print self.blog;
def printBblog(self):
print self.blog.swapcase();
我们是用python中的distutils将python模块进行打包的。
在这个过程中我们需要编写一个setup.py文件用来配置打包信息,示例如下所示:
from distutils.core import setup
setup(name="Myblog",
version="1.0",
description="My Blog Distribution Utilities",
author="Liu tiansi",
url="",
py_modules=['foo'])
其中setup()函数中的参数都是其的一些属性,name表示所打包的名称,version表示版本号,其余的大家都很理解。
另外还有一些其他的属性,比如packages/author_email/zip_safe/,其中packages要用到setuptools的另一个函数find_packages,find_packages用于将指定目录下的文件打包。
我们将foo.py文件与setup.py文件放在同一个文件夹下,比如D:\jingang,我们通过dos环境进入到jingang文件夹,然后通过此条命令:python setup.py sdist进行压缩,在windows下压缩为.zip文件,在Linux下压缩为.tar.gz文件。
setup.py参数说明:
#python setup.py build # 编译
#python setup.py install #安装
#python setup.py sdist #生成压缩包(zip/tar.gz)
#python setup.py bdist_wininst #生成NT平台安装包(.exe)
#python setup.py bdist_rpm #生成rpm包
或者直接"bdist 包格式",格式如下:
#python setup.py bdist --help-formats
--formats=rpm RPM distribution
--formats=gztar gziped tar file
--formats=bztar bzip2ed tar file
--formats=ztar compressed tar file
--formats=tar tar file
--formats=wininst Windows executable installer
--formats=zip ZIP file
进入到jingang文件夹下运行上述命令之后,则在jingang文件夹下产生两个文件,如下所示:
其中dist文件中显示内容如下所示:
其中Myblog表示压缩包的名称,1.0表示版本号。
这就是压缩后的压缩包。
使用者可以用这个压缩包进行安装。
安装步骤:
(1)将压缩包解压,比如解压到D:盘下,路径为D:\myblog
(2)在dos命令下进入到myblog文件夹,运行命令:
python setup.py install
(3)然后我们进行下测试,此时输入命令python,即进入到python dos
运行模式。
(4)我们导入包from foo import MyClass,然后创建实例app=MyClass(),
然后调用相应的方法,看输出是否与程序本身的输出一致。
实验证明是正确的。
参考文献:
1./kf/201009/74968.html
1./s/blog_68013e850100v5po.html
2./kf/201209/153517.html
二、如何将第三方语言的源程序扩展为python模块。
此处我们使用
swig来扩展python模块。
第一步:需要安装swig,其中swig是个帮助使用C/C++编写的软件能够与其他各种高级编程语言进行嵌入联接的开发工具。
它实际上是一种简化脚本语言与C/C++接口的开发工具。
将swig安装到D盘(其他盘也可以),目录为D:/swig,然后将此目录加入到环境变量path 中,方便我们随时使用swig。
我使用的是python27,但是默认的情况下python 27是不提供python27_b.lib与python27_b.dll这两个文件的,为了编译通过,需要在网上下载此两个文件。
在网上下载上述两个文件,并做如下操作,将下载的lib文件置于X:/Program Files/Microsoft Visual Studio 9.0/VC/lib,将dll文件置于X:/Program Files/Microsoft Visual Studio 9.0/VC/bin中,编译通过。
若是没有这两个文件,在用visual studio 2005或者2010并且用swig 将C++程序封装成python模块的时候,出现“无法打开python27_b.lib”文件这样的错误。
第二步:编写测试的.h与.cpp文件,同时编写.i接口文件,并放在一个文件夹下,比如D:/test文件夹。
源码如下(仅仅是示例)。
jsample.h文件:
/* jsample.h */
#ifndef JSAMPLE_H
#define JSAMPLE_H
//void cHelloWorld();
int compute(int a, int b);
#endif
jsample.cpp文件:
/* jsample.cpp */
#include<iostream>
#include"jsample.h"
using namespace std;
int compute(int a, int b)
{
int temp = (a+b)*(a-b);
return temp;
}
jsample.i接口文件:
/* File : jsample.i */
%module jsample
%inline %{
#include "jsample.h"
%}
int compute(int a,int b);
第三步:在dos环境下进入到D:/test文件夹下,输入命令行swig –c++ -python jsample.i,运行之后会在D:/test文件夹下生成两个文件jsample.py文件与jsample_wrap.cxx文件。
第四步:打开VS2005,配置VS的文件路径。
我的VS配置方法如下:工具->项目和解决方案->VC++目录,在“显示以下内容的目录”中选择“包含文件”,我们新建行,设置为
F:\ProgramFiles\python27\include,即python安装目录的include 文件夹的位置。
然后我们再设置“库文件”,我们新建行,并设置为F:\Program Files\python27\libs\python27.lib,即python27.lib 的所在目录。
其中路径最好不带空格,若是带空格,最好将python.lib 加入到项目中。
第五步:我们在VS2005中新建一个工程,win32控制台程序,dll,并且是空项目。
然后我们将D:/test文件夹中的jsample.h文件加入到项目的头文件中,将jsample.cpp与jsample_wrap.cxx文件加入到项目的源文件中。
将jsample.i文件添加到项目中,此时会弹出一个窗口,我选择的是“否”。
然后我们设置配置管理器,右击项目,单击属性,单击窗口右上角的配置管理器,配置选择Release,平台选择Win32。
我们再设置输出文件,因为我们需要的是.pyd文件,而VS默认的是dll文件,我们在项目属性中找到链接器,选择常规,然后设置输出文件,将$(OutDir)\$(ProjectName).dll修改为$(OutDir)\_$(ProjectName).pyd。
第六步:我们生成解决方案,此时在项目所在文件夹下会多一个release文件夹,文件夹中有我们需要的_jsample.pyd文件与
_jsample.lib文件,我们将_jsample.pyd文件放到python安装目录中的DLLs文件夹,即X:\Program Files\python27\DLLs,然后我们将_jsample.lib文件放到python安装目录中的libs文件夹中,即X:\Program Files\python27\libs。
第七步:我们用Ultraedit打开jsample.py文件,在其中加入import _jsample语句。
然后我们编写测试文件test1.py,将其与jsample.py 文件放在一个文件夹下(D:/test),测试文件源码如下所示:
# -*- coding: cp936 -*-
# runme.py
from __future__ import division
import jsample
print('this is the test running.\n')
aa = pute(5,2)
print(aa)
raw_input("press the enter key to exit.")
然后我们通过dos进入到D:/test文件夹,直接运行test1.py,则是会出现结果,如下图所示:
参考文献:
1./u/20090303/21/72a4fa1d-9146-4fc2-8555-8db2304d02df.html
2./s/blog_513f4e840100hb4y.html。