[英]Can I install Python windows packages into virtualenvs?
Virtualenv 很棒:它讓我可以保留多個不同的 Python 安裝,這樣不同項目的依賴項就不會全部扔到一起。
但是,如果我想在 Windows 上安裝一個 package ,它被打包為一個 .exe 安裝程序,我該如何引導它安裝到 virtualenv 中? 比如我有pycuda-0.94rc.win32-py2.6.exe。 當我運行它時,它會檢查注冊表,並發現只有一個 Python26 可以安裝到其中,這是我的 virtualenv 所基於的常見的一個。
我怎樣才能將它安裝到 virtualenv 中?
是的你可以。 所有你需要的是
easy_install binary_installer_built_with_distutils.exe
驚訝嗎? 看起來像使用distutils的Windows二進制安裝程序將.exe和.zip組合成一個.exe文件。 將擴展名更改為.zip,以查看它是有效的zip文件。 我在閱讀了我的問題的答案后發現了這一點我在哪里可以用psycopg2 for Windows下載二進制蛋?
UPDATE
正如Tritium21在他的回答中所說,你應該使用pip而不是easy_install。 Pip無法安裝distutils創建的二進制包,但它可以以新的輪子格式安裝二進制包。 您可以使用wheel包將舊格式轉換為新格式,您必須先安裝。
我知道這是一個相當古老的問題,並且早於我將談論的工具,但是為了Google,我認為提及它是個好主意。 easy_install是python包裝的黑羊。 沒有人願意承認使用新的熱情。 此外,雖然播放注冊表技巧最適合非標准EXE安裝程序(有人自己構建安裝程序而不是使用distutils,並且正在檢查注冊表中的安裝路徑),現在有一個更好的方法(c)用於標准EXE安裝程序。
pip install wheel
wheel convert INSTALLER.EXE
pip install NEW_FILE_CREATED_IN_LAST_STEP.whl
最近在本文中介紹的車輪格式是雞蛋格式的替代品,充當了同樣的角色。 pip(已經安裝在virtualenv中的工具)也支持這種格式。
如果由於某種原因pip install WHEELFILE
不起作用,請嘗試使用wheel install WHEELFILE
我最終調整了一個腳本( http://effbot.org/zone/python-register.htm )來在注冊表中注冊Python安裝。 我可以選擇Python作為注冊表中的 Python,運行Windows安裝程序,然后設置注冊表:
# -*- encoding: utf-8 -*-
#
# script to register Python 2.0 or later for use with win32all
# and other extensions that require Python registry settings
#
# Adapted by Ned Batchelder from a script
# written by Joakim Löw for Secret Labs AB / PythonWare
#
# source:
# http://www.pythonware.com/products/works/articles/regpy20.htm
import sys
from _winreg import *
# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix
regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
installpath, installpath, installpath
)
def RegisterPy():
try:
reg = OpenKey(HKEY_LOCAL_MACHINE, regpath)
except EnvironmentError:
try:
reg = CreateKey(HKEY_LOCAL_MACHINE, regpath)
except Exception, e:
print "*** Unable to register: %s" % e
return
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
print "--- Python %s at %s is now registered!" % (version, installpath)
if __name__ == "__main__":
RegisterPy()
使用您要注冊的Python運行此腳本,它將被輸入注冊表。 請注意,在Windows 7和Vista上,您需要管理員權限。
easy_install能夠安裝.exe軟件包,只要它們是使用distutils的bdist_wininst目標構建的,它涵蓋了許多流行的軟件包。 然而,還有很多其他的不是(wxPython是我一直在努力的)
您可以使用環境的easy_install來安裝PyCUDA。
dev-env-path/bin/easy_install pycuda
它會給你相同的版本0.94rc。
在Windows上,easy_install.exe將位於Scripts目錄中。
如果是.msi
,您可以使用msiexec
指定命令行選項。 Python 安裝程序本身允許TARGETDIR
,但我不確定distutils是否會將其烘焙到分發安裝程序中。
如果您使用的是.exe
,我認為沒有一種干凈的方式。 一種選擇是使用像7Zip(或winzip等)之類的程序直接提取exe的內容,然后將相關文件夾復制到虛擬站點包文件夾中。 例如,如果我提取“processing-0.5.2.win32-py2.5.exe”,我找到一個文件夾“PLATLIB \\ processing”,我將其復制到virtualenv路徑並使用,沒有任何運行時問題。 (我不確定它總是那么簡單。)
您應該鍵入文件的路徑並在其前面寫上“python”。
它將在沒有任何虛擬環境的情況下運行您的 python 腳本。
謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.