簡體   English   中英

如何為python3和python2分別設置不同的PYTHONPATH變量

[英]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路徑的目錄。

來自docs.python2docs.python3

路徑配置文件是一個名稱格式為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文件是否正常工作
  • DONE

有關`.pth的更多信息。 文件語法及其工作原理請參閱: python2 docspython3 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM