本人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相互不影響都可以使用。