簡體   English   中英

使用 pip 安裝 package 的多個版本

[英]Installing multiple versions of a package with pip

在我的應用程序中,我想使用:

  • packageA ,需要packageX==1.3
  • packageB ,需要packageX==1.4
  • packageX==1.5

如何使用 pip 安裝多個版本的packageX來處理這種情況?

pip 幫不了你。

您可以告訴它安裝特定版本,但它會覆蓋另一個版本。 另一方面,使用兩個 virtualenv 可以讓您在同一台機器上安裝兩個版本,但不能同時使用它們。

最好的辦法是手動安裝這兩個版本,方法是將它們放在 Python 路徑中,使用不同的名稱。

但是,如果您的兩個庫希望它們具有相同的名稱(並且它們應該具有相同的名稱),您將不得不修改它們,以便它們使用一些導入別名來獲取它們需要的版本,例如:

import dependencyname_version as dependencyname

目前沒有干凈的方法可以做到這一點。 你能希望的最好的就是讓這個黑客工作。

我寧願放棄這兩個庫中的一個並將其替換為等效庫,或者對其進行修補以接受新版本的依賴項並將補丁返回給社區。

下載 ea 的源代碼。 package。 將每個安裝在其自己的單獨文件夾中。 例如。 我有版本 1.10 package,但想切換到開發版本進行一些工作。 I downloaded the source for the dev module: git clone https://github.com/networkx/networkx.git cd netwokrx I created a folder for this version: mkdir /home/username/opt/python , then I set the PYTHONPATH env var to: export PYTHONPATH=/home/username/opt/python/lib/python2.7/site-packages/ 接下來,我安裝它使用: python setup.py install --prefix=/home/username/opt/python

現在,由於我的 PYTHONPATH 現在指向另一個站點包文件夾,所以當我在命令行上運行 python 並導入新模塊時,它就可以工作了。 要切換回來,請從 PYTHONPATH 中刪除新文件夾。

>>> import networkx as nx
>>> nx.__version__
'2.0.dev_20151209221101'

我在攪拌機中與 python 一起使用的一個丑陋的解決方法是我將安裝(並遠離路徑)類似版本的 python 並使用子進程讓其他版本完成所需的工作。 如果您做的不僅僅是安裝 pandas 和 scipy,那么攪拌機 python 往往會變得有點喜怒無常。 我已經嘗試過使用帶有攪拌機的 virtualenvs 但這往往會破壞事情。

此外,如果您使用攪拌機進行數據可視化,您將希望將配置文件夾添加到您的版本號文件夾中,這會將您的所有插件保留在該文件夾中,並且它使其更便攜且不太可能搞亂攪拌機的其他安裝。 許多為攪拌機制作插件的人不是“程序員”,所以那些精明的人經常會做一些非常駭人聽聞的事情,這是我能夠使用的最好的解決方法。

另一種解決方法(這在游戲中有很多標志,以至於它應該取消我觸摸鍵盤的資格)是手動定位初始化文件並使用 importlib 手動將其添加到全局變量中......這會帶來風險。 執行此操作時,某些模塊會正常運行,而其他模塊會拋出可能導致額外特殊故障排除會話的廢話。 保持它喜歡的版本,它確實減少了問題,我很幸運使用它從虛擬環境后面導入模數,但我在使用攪拌機的 python 時使用子進程調用是有原因的。

def importfromfilelocation(x,y,z):
    #"""x = 'tk',y = "tkinter", z =r'C:\pyth"""
    mod_alis = x
    spec = importlib.util.spec_from_file_location(y, z)
    print(spec)
    mod_alis = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(mod_alis)
    globals()[str(x)]= mod_alis

另一個“解決方法”是使用 IPC/RPC 並在服務中運行隔離包。 如果依賴關系在不同的庫上,也許可以通過包的使用來分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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