![](/img/trans.png)
[英]I have 2 versions of python installed, but cmake is using older version. How do I force cmake to use the newer version?
[英]Force python to use an older version of module (than what I have installed now)
我的雇主有一個專門的模塊1 ,我們用於內部單元/系統測試; 然而,這個模塊的作者不再在這里工作,我被要求用它測試一些設備。
問題是pyfoo
需要一個古老版本的twisted
(v8.2.0) 並且它在 33 個不同的文件中導入twisted
。 我嘗試在 v11.0.0 下運行pyfoo
的單元測試,但我什至沒有看到 TCP SYN packets 2 。 不幸的是,我已經在我的實驗室 linux 服務器上安裝了twisted v11.0.0 ,並且我有自己的代碼依賴於它。
為了解決這個問題,我只提出了以下選項:
選項A。 安裝新版本的python,安裝virtualenv
,然后在virtualenv
下安裝老版本的twisted
。 僅在 python 的這個新版本下運行需要pyfoo
的測試。
選項B。 使用以下內容編輯所有 33 個文件: DIR = '../'; sys.path.insert(0, DIR)
DIR = '../'; sys.path.insert(0, DIR)
並將舊版本 python 安裝在源碼下的相應目錄中。
選項 C 。 嘗試修復pyfoo
以使用 v11.0.0 3
我缺少任何選項嗎? 除了上面的選項 A 之外,還有更優雅的方法來解決這個問題嗎?
pyfoo
pyfoo
不是微不足道的,我的這項工作的截止日期很短。選項 B 的更好版本是替換
import twisted
經過
import pkg_resources
pkg_resources.require("Twisted==8.2.0")
import twisted
這將安排導入正確版本的扭曲,只要它已安裝,否則引發異常。 這是一個更便攜的解決方案。
但是,如果在調用pkg_resources.require
之前導入了 twisted ,則這將不起作用(選項 B 的任何其他變體也不會); twisted
將已經在sys.modules
OP 編輯:根據pkg_resources
文檔進行少量語法更正
如果 SingleNegationElimination 的解決方案不起作用,請注意您不需要替換導入的所有 33 個實例; 您只需要在入口點修改sys.path
; 例如,您可以僅針對模塊的__init__.py
文件。
在那里你會插入例如
import sys
sys.path.insert(0, DIR)
我無法告訴您在您的情況下什么是最好的,但您可以考慮:
選項 D:在虛擬機中運行(例如使用 Windows 7)
選項 E:在另一台機器上安裝舊版本的 python/twisted
我花了一些試驗和錯誤來解決我的情況。 其中涉及已接受的答案及其附加評論(提到添加 _需要_)
__requires__= 'twisted==8.2.0'
import pkg_resources
pkg_resources.require("twisted==8.2.0")
import twisted
您應該在導入前卸載並安裝。
第一的,
!pip uninstall igraph -y
!pip uninstall python-igraph -y
!pip install python-igraph==0.9.6
!pip install cairocffi
然后,
import igraph
print(igraph.__version__)
% 0.9.6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.