[英]should pythonpath have directories specific to python2 and python3?
[英]how to set different PYTHONPATH variables for python3 and python2 respectively
我想只為python2添加一個特定的庫路徑。 然后,在我的.bashrc
添加export PYTHONPATH="/path/to/lib/"
之后,執行python3會收到錯誤:您的PYTHONPATH指向Python 2.x的site-packages目錄,但您運行的是Python 3.x!
我認為這是由於python2和python3共享常見的PYTHONPATH
變量。
那么,我可以分別為python2和python3設置不同的PYTHONPATH
變量。 如果沒有,我如何將庫路徑專門添加到特定版本的python?
就包管理而言, PYTHONPATH
有點像黑客。 一個“漂亮”的解決方案是打包你的庫並安裝它。
這可能聽起來比現在更棘手,所以讓我告訴你它是如何工作的。
讓我們假設您的“包”有一個名為wow.py
文件,並將wow.py
保存在/home/user/mylib/wow.py
。
使用以下內容創建文件/home/user/mylib/setup.py
:
from setuptools import setup
setup(name="WowPackage",
packages=["."],
)
就是這樣,現在您可以將您的軟件包“正確安裝”到您選擇的Python發行版中,而無需擔心PYTHONPATH
。 就“正確安裝”而言,您至少有三個選擇:
“真的很合適”。 將您的代碼復制到python site-packages目錄:
$ python setup.py install
“發展”。 只會添加python site-packages到/home/user/mylib
。 這意味着對目錄中代碼的更改將起作用。
$ python setup.py develop
“用戶”。 如果您不想寫入系統目錄,可以將軟件包(“正確”或“處於開發模式”)安裝到/home/user/.local
目錄,Python也可以在其中找到它們。 為此,只需在命令中添加--user
即可。
$ python setup.py install --user $ python setup.py develop --user
要刪除在開發模式下安裝的軟件包,請執行
$ python setup.py develop -u
要么
$ python setup.py develop -u --user
要刪除“正確”安裝的軟件包,請執行
$ pip uninstall WowPackage
如果你的包比單個文件更有趣(例如你有子目錄等),只需列出setup
函數的packages
參數中的那些(你需要遞歸列出所有內容,因此你將使用一個幫助函數來處理更大的庫)。 一旦掌握了它,請務必閱讀更詳細的手冊 。
最后,去把你的包貢獻給PyPI - 就像調用python setup.py sdist register upload
一樣簡單(盡管你需要一個PyPI用戶名)。
您可以在lib/site-packages
(在Windows上)或lib/pythonX.Y/site-packages
(在Unix和Macintosh上)下創建配置文件mymodule.pth
,然后添加一行包含要添加到python路徑的目錄。
路徑配置文件是一個名稱格式為
name.pth
的文件,存在於上述四個目錄之一中; 其內容是要添加到sys.path
附加項(每行一個)。 不存在的項永遠不會添加到sys.path
,也不會檢查該項是指目錄而不是文件。 沒有任何項目多次添加到sys.path
。 以#開頭的空白行和行將被跳過。 以import
開頭的行(后跟空格或制表符)將被執行。
我發現沒有辦法修改僅用於python2
或僅用於python3
PYTHONPATH
。 我不得不使用.pth
文件 。
我必須做的是:
$HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
.pth
文件 .pth
文件是否正常工作 有關`.pth的更多信息。 文件語法及其工作原理請參閱: python2 docs和python3 docs 。
( .pth
文件簡而言之:當你的python解釋器啟動時,它將查看某些目錄並查看.pth
文件,打開這些文件,解析文件,並將這些目錄添加到sys.path
(即與PYTHONPATH
相同的行為) )並使位於這些目錄上的任何python模塊可用於正常導入。)
如果您不想在lib/site-packages
移動/添加文檔,請嘗試在您要運行的python2.7腳本中添加兩行代碼(如下所示)。
import sys
sys.path = [p for p in sys.path if p.startswith(r'C:\Python27')]
這樣,每次運行代碼時都會更新PYTHONPATH(忽略所有python3.x包)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.