簡體   English   中英

我可以將 Python windows 包安裝到 virtualenvs 中嗎?

[英]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.

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