本人python菜鸟一枚,在学习python过程中,经常要按照教程编写一些模块和函数练手,刚开始只是在python shell中编写,但是如果出错就会非常悲剧,又要从头开始编,而且重启python后也要重新编写模块。所以希望能像bash编程那样将脚本路径添加到环境变量中,这样修改起来也方便。以下内容均来源于网络及本菜鸟。
摘要:本文叙述了如何在linux环境下添加python模块的路径,第1部分介绍了如何查看python环境变量,第2部分介绍了如何将脚本放入python自带的环境变量目录中,第3部分介绍了如何将目录放入python的环境变量中重启python失效,第4部分介绍了如何为python添加永久环境变量目录。这些方法可以使模块的修改和重复使用更加方便,不用重复输入。
1、首先,可以用python中的内建模块sys来查看python的环境变量。
这些目录都是python的环境变量。
2.接下来本菜鸟尝试一下如果将提前写好的python脚本放入这些目录中,能不能在python中使用。别问为什么跑题,本菜就想试一试^ -^。
选择/usr/local/lib/python2.7/dist-packages/pip-7.1.2-py2.7.egg这个目录,脚本名为my_mole.py,里面只有一个名为c_to_f的函数,用来计算从摄氏温度转换为华氏温度。
可以看到,脚本已经位于刚开始选定的的目录下了。
我们现在来看看,在python中导入这个模块。并按照“模块.函数”的格式使用函数。
可以看到,导入模块成功,其中的c_to_f函数也正确使用,10摄氏度=50华氏度。或者你在确定函数名不重名的前提下,可以from my_mole import c_to_f,这样就可以直接使用函数c_to_f,而不需要模块名作为前缀。
实验成功,将脚本导入python自带的环境变量目录中是有效的,如果之前运行了python,再导入后并不用重启python就可以导入模块。
3.接下来我们回归正题,如何自定义python环境变量目录。最直接的想法是把目录加到刚才的python环境变量中。可以使用sys.path.append('/.../....')。
然后再次查看path路径,发现"/home/sh/python"目录确实加入了。并且也可以使用。但是这种方法一旦退出python,刚才新加的目录就消失了。
4.接下来介绍一种一劳永逸的方法,就是直接修改系统变量。
export PYTHONPATH=$PYTHONPATH:/..../..../,对,没错,直接在shell中敲这一行,目录是你自定义的目录,然后打开python,import my_mole,你就愉快的可以使用自定义的模块了。
http://blog.sina.com.cn/s/blog_959cf80d0102vx3j.html
⑵ linux系统python24版本functools模块
把你的python版本升级到2.7
我使用2.7版本,没有这个问题,可以正常引用。
另外就是库的版本请参考
xlrd 0.9.3
xlwt 0.7.5
setuptools-3.0b1
xlutils 1.7.1
⑶ 在Linux上怎么安装python的模块呢
一、 单文件模块
直接把文件拷贝到 $python_dir/Lib
二、 多文件模块,带setup.py
python setup.py install
三、 egg文件
1) 下载ez_setup.py,运行python ez_setup
2) easy_install *.egg
注:虽然Python的模块可以拷贝安装,但是一般情况下推荐制作一个安装包,即写一个setup.py文件来安装。
⑷ 怎样在Linux环境下改变python的模块路径
sys.path.append方法
/usr/local/lib/python2.7/dist-packages(或/usr/lib/python2.7/site-packages)添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的文件名称就是了,如/home/xxx/python_pkgs,保存退出,OK!结果自己验证,重启terminal,再次打开python
⑸ linux环境的 python 可以直接全部包到其它linux机器使用么
一般都可以,不过至少要满足以下条件:
python解释器的版本要一致
如果调用了python的扩展模块,则在其他机器上也要安装好同样的扩展模块。
如果调用了其他第三方服务等,则在其他机器上也要能够访问。
⑹ 如何编译C++文件为Python扩展模块
大概有三种常用方法:
1>使用ctypes模块来调用C写的共享库,比如:
[python] view plain print?
#测试ctypes调用linux动态库的能力
from ctypes import *
lib = CDLL("libc.so.6")
printf = lib.printf
printf("Hello World\n")
#查找动态库
from ctypes.util import find_library
print find_library('c')
output = CDLL(find_library("c")).printf
output("测试成功!\n")
但是用它来调用C++写的so就不太合适,因为编译时c++函数名修饰会给你的函数取一个特殊的字符串,你不能在你的python代码里直接使用此函数名,除非你使用的是修饰后的函数名。(在linux下你可以用nm来查看so中的函数名)
2>用C来写python的扩展模块,这个没怎么用过,以后使用时再记录在此。
3>用C++来写python扩展模块:
我是使用Boost.Python来写扩展的,先上工作中的代码片段:
[python] view plain print?
#include <boost/python.hpp> //包含boost.python头文件
#include <cstdio>
#include <string>
using namespace boost::python;//引入命令空间
class lshw //定义一个类
{
public:
lshw();
virtual ~lshw();
void scan_device();
string get_xml();
private:
hwNode *computer;
};
lshw::lshw()
{
computer = new hwNode("computer", hw::system);
}
lshw::~lshw()
{
if (computer)
delete computer;
}
void lshw::scan_device()
{
enable("output:numeric");
disable("output:sanitize");
scan_system(*computer);
}
string lshw::get_xml()
{
return computer->asXML();
}
void hello()
{
std::cout << "Hello World!" <<std::endl;
}
BOOST_PYTHON_MODULE(lshw)
{
class_<lshw, boost::nonable > ("lshw", "This is a lshw project python extend", init<>())//导出类中的方法
.def("scan_device", &lshw::scan_device)
.def("get_xml", &lshw::get_xml)
;
def("hello",&hello);//导出方法
}
使用boost.python其实结构很简单,你只要写很少的boost.python的代码,你可以把大部分的精力放在C++功能代码上,花很少的精力就可以把它扩展成python的模块。下面是我在Ubuntu11.10上的编译过程:
首先安装boost.python:
sudo apt-get install libboost-python1.46.1
再来编译生成so共享库文件:
g++ -shared -fPIC lshw.cc -o lshw.so -lboost_python
使用:
[python] view plain print?
import lshw
hw = lshw.lshw()
lshw.hello()
hw.scan_device()
xml = self.hw.get_xml()
⑺ linux python 怎么从网上安装模块
如楼上,补充一个,还有直接安装,就是python install setup.py,setup.py为模块安装包解压后里边的安装文件
⑻ linux 安装python拓展包pexpect
哦。因为你是egg格式。所以需要安装一个setup tool,也有可能是ezsetup。这个在它的安装里有一个详细提示。
distuils.core是python的setup.py里引用的一个安装包。通常python安装分发包都要使用这个库。
从现在这个情况看。你的机器上的python似乎不是一个完整版本。
我以前在suse的linux上发现过这种问题。
你可以单独安装一个自己的python版本。这样linux原有的python与你安装的python相互不影响都可以使用。