今天在 centos 下安裝 python setup.py install 時報錯:ImportError: No module named sysconfig,
當時急着用,就順手直接源碼編譯了一把,make install 後就 ok 了。
而後又在 cygwin 下安裝時一樣的問題,這下 cygwin 源碼編譯也不行了,由於會調用不少 linux 特有的類庫。
雖然最後解決了 import 的問題,可是又報了其它錯。好比 ldconfig 啥的,多是我cygwin環境沒裝全。
只有換方法:從cygwin開源鏡像上下載好 cygwin binary 版本的 python 2.7.3,
而後覆蓋到相應的目錄便可。
過後我查了下 python 的import機制,以備忘:
python中,每一個py文件被稱之爲模塊,每一個具備__init__.py文件的目錄被稱爲包。只要模塊或者包所在的目錄在sys.path中,就可使用import 模塊或import 包來使用。
若是想使用非當前模塊中的代碼,須要使用Import,這個你們都知道。
若是你要使用的模塊(py文件)和當前模塊在同一目錄,只要import相應的文件名就好,好比在a.py中使用b.py:
import b
可是若是要import一個不一樣目錄的文件(例如b.py)該怎麼作呢?
首先須要使用sys.path.append方法將b.py所在目錄加入到搜素目錄中。而後進行import便可,例如
import sys
sys.path.append('c:\xxxx\b.py') # 這個例子針對 windows 用戶來講的
大多數狀況,上面的代碼工做的很好。可是若是你沒有發現上面代碼有什麼問題的話,可要注意了,上面的代碼有時會找不到模塊或者包(ImportError: No module named xxxxxx),這是由於:
sys模塊是使用c語言編寫的,所以字符串支持 '\n', '\r', '\t'等來表示特殊字符。因此上面代碼最好寫成:
sys.path.append('c:\\xxx\\b.py')
或者sys.path.append('c:/xxxx/b.py')
這樣能夠避免由於錯誤的組成轉義字符,而形成無效的搜索目錄(sys.path)設置。
html
但上述方法是針對腳原本說的,每次使用要記得加上,若是永久性的加入某個目錄到sys.path中去呢? python
如何將路徑「永久"添加到sys.path? linux
sys.path是python的搜索模塊的路徑集,是一個listgit
能夠在python 環境下使用sys.path.append(path)添加相關的路徑,但在退出python環境後本身添加的路徑就會自動消失了!github
可使用如下命令輸入當前python 的搜索路徑:shell
python -c"import sys;print '當前的python是:'+sys.prefix;print '\n'.join(sys.path)"ubuntu
練習使用sys.path.append方法添加路徑,顯示退出python會消失!windows
python -c"import sys;print '當前的python是:'+sys.prefix;sys.path.append(r'E:\DjangoWord');print '\n'.join(sys.path)"centos
再次運行,會發現 本身添加路徑E:\DjangoWord()不存在了!bash
python -c"import sys;print '當前的python是:'+sys.prefix;print '\n'.join(sys.path)"
爲解決這個問題,能夠有如下方法:
將本身作的py文件放到 site_packages 目錄下:
下面命令顯示了 site-packages 目錄:
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
可是這樣作會致使一個問題,即各種模塊都放到此文件夾的話,會致使亂的問題,這一點是顯而易見的。
注意,也不建立子文件夾,再將本身的模塊放到子文件夾解決問題,這會致使使用import 語句時錯誤。
使用pth文件,在 site-packages 文件中建立 .pth文件,將模塊的路徑寫進去,一行一個路徑,如下是一個示例,pth文件也可使用註釋:
# .pth file for the my project(這行是註釋)
E:\DjangoWord
E:\DjangoWord\mysite
E:\DjangoWord\mysite\polls
這個不失爲一個好的方法,但存在管理上的問題,並且不能在不一樣的python版本中共享。
使用PYTHONPATH環境變量,在這個環境變量中輸入相關的路徑,不一樣的路徑之間用逗號(英文的!)分開,若是PYTHONPATH 變量還不存在,能夠建立它!以下圖所示:
這裏的路徑會自動加入到sys.path中,並且能夠在不一樣的python版本中共享,應該是同樣較爲方便的方法。
關於與python相關的環境變量有那些,請參考:
http://docs.python.org/using/cmdline.html 在頁面上找到PYTHONPATH
如下是該環境變量的描述:
PYTHONPATH¶
Augment the default search path for module files. The format is the same asthe shell’s PATH: one or more directory pathnames separated byos.pathsep (e.g. colons on Unix or semicolons on Windows).Non-existent directories are silently ignored.
In addition to normal directories, individual PYTHONPATH entriesmay refer to zipfiles containing pure Python modules (in either source orcompiled form). Extension modules cannot be imported from zipfiles.
The default search path is installation dependent, but generally begins withprefix/lib/pythonversion (see PYTHONHOME above). Itis always appended to PYTHONPATH.
An additional directory will be inserted in the search path in front ofPYTHONPATH as described above underInterface options. The search path can be manipulated fromwithin a Python program as the variable sys.path.
附:python安裝模塊的多種方法
一、本身寫的模塊,能夠直接添加到路徑下。這樣就能夠直接調用。
import sys
sys.path.append("/home/username/")
二、單文件模塊
直接把文件拷貝到$python_dir/lib
三、網上下載的第三方庫,通常解壓後,找setup.py文件
運行python setup.py install
四、 egg文件
1) 下載ez_setup.py,運行python ez_setup
2) easy_install *.egg
五、pip安裝方法
Pip 是安裝python包的工具,提供了安裝包,列出已經安裝的包,升級包以及卸載包的功能。
Pip 是對easy_install的取代,提供了和easy_install相同的查找包的功能,所以可使用easy_install安裝的包也一樣可使用pip進行安裝。
安裝Pip
Pip的安裝能夠經過源代碼包,easy_install或者腳本。
下面介紹一下各類安裝方法:
源代碼方式:
$ wget https://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz (替換爲最新的包)
$ tar xzf pip-1.2.1.tar.gz
$ cd pip-1.2.1.tar.gz
$ python setup.py install
easy_install:
$ easy_install pip
get_pip.py 腳本:
$ curl -0 https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ sudo python get-pip.py
OK, 下面來看一下Pip的使用
安裝package
$ pip install Markdown
列出安裝的packages
$ pip freeze
安裝特定版本的package
經過使用==, >=, <=, >, <來指定一個版本號。
$ pip install 'Markdown<2.0'
$ pip install 'Markdown>2.0,<2.0.3'
升級包
升級包到當前最新的版本,可使用-U 或者 --upgrade
$ pip install -U Markdown
卸載包
$ pip uninstall Markdown
查詢包
pip search "Markdown"
六、特殊庫的安裝(一個科學計算庫Enthought Python Distribution的安裝)
Enthought Python Distribution在ubuntu下安裝的測試,應一個網友的請求,問怎麼安裝這個庫,從官方網站上下載了一個文件
epd_free-7.3-2-rh5-x86.sh,遮個文件是sh 格式的文件,用sudo bash epd_free-7.3-2-rh5-x86.sh 運行這個文件,出現不少權限的閱讀,點回車,不要連續點
須要點一次看一下,最後出現一個同一不一樣一它的版權聲明,輸入"yes",再下來是讓選擇安裝的目錄,點回車,就安裝在當前目錄下。
這樣就安裝好了。
當前目錄下輸入
>>> ipython --pylab
就出來
Python 2.7.3 (default, Apr 20 2012, 22:44:07)
Type "copyright", "credits" or "license" for more information.
IPython 0.12.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
Welcome to pylab, a matplotlib-based Python environment [backend: TkAgg].
For more information, type 'help(pylab)'.
再這樣調用。這個庫因爲我工做上用不上,因此也不須要進一步的研究。
In [1]: from scipy import *
In [2]: a=zeros(1000)
In 3]: a[:100]=1
In [4: b=fft(a)
In [5]: plot(abs(b))
REF:
沒法import的緣由(ImportError: No module named *****)
http://hi.baidu.com/itaolei/item/197d9f10521ba8011894ec99
近期python 學習的一些總結:添加路徑到sys.path