python中sys.path详解
轉自:http://doudouclever.blog.163.com/blog/static/1751123102011722246231/
如何將路徑“永久"添加到sys.path?
sys.path是python的搜索模塊的路徑集,是一個list
可以在python 環境下使用sys.path.append(path)添加相關的路徑,但在退出python環境后自己添加的路徑就會自動消失了!
可以使用以下命令輸入當前python 的搜索路徑:
python -c"import sys;print '當前的python是:'+sys.prefix;print '\n'.join(sys.path)"
練習使用sys.path.append方法添加路徑,顯示退出python會消失!
python -c"import sys;print '當前的python是:'+sys.prefix;sys.path.append(r'E:\DjangoWord' ) ;print '\n'.join(sys.path)"
?
再次運行,會發現 自己添加路徑E:\DjangoWord()不存在了!
?
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 as the shell’s PATH : one or more directory pathnames separated by os.pathsep (e.g. colons on Unix or semicolons on Windows). Non-existent directories are silently ignored.
?
In addition to normal directories, individual PYTHONPATH entries may refer to zipfiles containing pure Python modules (in either source or compiled form). Extension modules cannot be imported from zipfiles.
?
The default search path is installation dependent, but generally begins with prefix /lib/python version (see PYTHONHOME above). It is always appended to PYTHONPATH .
?
An additional directory will be inserted in the search path in front of PYTHONPATH as described above under Interface options . The search path can be manipulated from within a Python program as the variable sys.path .
轉自:http://book.51cto.com/art/201005/198555.htm
動態地改變Python搜索路徑
《Python Cookbook(第2版)中文版》第2章文件,本章呈現了操作文件中的數據以及操縱文件系統下的文件和目錄的一些技術,還包括了處理特定的文件格式以及存檔格式的內容,比如tar和zip格式。本節為大家介紹動態地改變Python搜索路徑。
2.21? 動態地改變Python搜索路徑
感謝:Robin Parmar
任務
模塊必須處于Python搜索路徑中才能被導入,但你不想設置個永久性的大路徑,因為那樣可能會影響性能,所以,你希望能夠動態地改變這個路徑。
解決方案
只需簡單地在Python的sys.path中加入一個"目錄",不過要小心重復的情況:
討論
模塊要處于Python搜索路徑中的目錄里才能被導入,但我們不喜歡維護一個永久性的大目錄,因為其他所有的Python腳本和應用程序導入模塊的時候性能都會被拖累。本節代碼動態地在該路徑中添加了一個"目錄",當然前提是此目錄存在而且此前不在sys.path中。
sys.path是個列表,所以在末尾添加目錄是很容易的,用sys.path.append就行了。當這個append執行完之后,新目錄即時起效,以后的每次import操作都可能會檢查這個目錄。如同解決方案所示,可以選擇用sys.path.insert(0,…,這樣新添加的目錄會優先于其他目錄被import檢查。
即使sys.path中存在重復,或者一個不存在的目錄被不小心添加進來,也沒什么大不了,Python的import語句非常聰明,它會自己應付這類問題。但是,如果每次import時都發生這種錯誤(比如,重復的不成功搜索,操作系統提示的需要進一步處理的錯誤),我們會被迫付出一點小小的性能代價。為了避免這種無謂的開銷,本節代碼在向sys.path添加內容時非常謹慎,絕不加入不存在的目錄或者重復的目錄。程序向sys.path添加的目錄只會在此程序的生命周期之內有效,其他所有的對sys.path的動態操作也是如此。
總結
以上是生活随笔為你收集整理的python中sys.path详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MOSFET损耗计算
- 下一篇: 学前教育的数字化是必然趋势,KidsLo