ฉันสามารถติดตั้งแพคเกจ Python windows ลงใน Virtualenvs ได้หรือไม่


125

Virtualenv นั้นยอดเยี่ยมมาก: มันช่วยให้ฉันสามารถเก็บการติดตั้ง Python ที่แตกต่างกันได้จำนวนหนึ่งเพื่อให้การอ้างอิงของโปรเจ็กต์ต่างๆไม่ได้ถูกรวมเข้าด้วยกันเป็นกองทั่วไป

แต่ถ้าฉันต้องการติดตั้งแพคเกจบน Windows ที่รวมเป็นโปรแกรมติดตั้ง. exe ฉันจะสั่งให้ติดตั้งลงใน Virtualenv ได้อย่างไร ตัวอย่างเช่นฉันมี pycuda-0.94rc.win32-py2.6.exe เมื่อฉันเรียกใช้มันจะตรวจสอบรีจิสทรีและพบว่ามีเพียง Python26 เพียงตัวเดียวที่จะติดตั้งซึ่งเป็นสิ่งที่พบได้ทั่วไปซึ่งมีพื้นฐานมาจาก Virtualenv ของฉัน

ฉันจะสั่งให้ติดตั้งลงใน Virtualenv ได้อย่างไร?


1
คำตอบด้านล่างใช้ได้กับฉัน stackoverflow.com/questions/6114115/…
user1960422

คำตอบ:


201

ใช่คุณสามารถ. สิ่งที่คุณต้องการคือ

easy_install binary_installer_built_with_distutils.exe

ประหลาดใจ? ดูเหมือนว่าโปรแกรมติดตั้งไบนารีสำหรับ Windows ที่สร้างด้วย distutils จะรวม. exe กับ. zip เป็นไฟล์. exe ไฟล์เดียว เปลี่ยนนามสกุลเป็น. zip เพื่อดูว่าเป็นไฟล์ zip ที่ถูกต้อง ฉันค้นพบสิ่งนี้หลังจากอ่านคำตอบสำหรับคำถามของฉันฉันจะดาวน์โหลดไข่ไบนารีด้วย Psycopg2 สำหรับ Windows ได้ที่ไหน

UPDATE

ตามที่ระบุไว้โดย Tritium21 ในคำตอบของเขาในปัจจุบันคุณควรใช้ pip แทน easy_install Pip ไม่สามารถติดตั้งแพ็กเกจไบนารีที่สร้างโดย distutils แต่สามารถติดตั้งแพ็กเกจไบนารีในรูปแบบวงล้อใหม่ได้ คุณสามารถแปลงจากรูปแบบเก่าเป็นรูปแบบใหม่โดยใช้แพ็คเกจล้อซึ่งคุณต้องติดตั้งก่อน


2
ฉันเห็นด้วยนี่เป็นเรื่องที่ดี อย่างไรก็ตามหากคุณมี 7zip คุณสามารถเปิด. exe ได้โดยตรงโดยไม่ต้องเปลี่ยนชื่อเป็น zip
Sabuncu

5
เพียงแค่ปลาย: นักพัฒนาสามารถดาวน์โหลดแพคเกจหลามสร้างต่างๆสำหรับหน้าต่างจาก lfd.uci.edu/~gohlke/pythonlibs
yangzh

@CodyHatch คุณทำได้เพราะนี่ไม่ใช่คำตอบเดียวของฉันเกี่ยวกับ SO และมีโอกาสที่คำตอบอื่น ๆ ของฉันจะเป็นประโยชน์กับคุณเช่นกัน :)
Piotr Dobrogost

1
ฉันจะได้รับต่อไปนี้: การค้นหาไบนารีติดตั้งที่สร้างขึ้นที่มี distutils.exe อ่านpypi.python.org/simple/...อ่านpypi.python.org/simple/...ไม่พบหน้าดัชนีสำหรับ 'binary_installer_built_with_distutils.exe' การสแกนดัชนีของแพ็คเกจทั้งหมด (อาจใช้เวลาสักครู่) การอ่านpypi.python.org/simpleไม่พบแพ็กเกจโลคัลหรือลิงก์ดาวน์โหลดสำหรับข้อผิดพลาด binary-installer-built-with-distutils.exe: ไม่พบการกระจายที่เหมาะสมสำหรับ Requirement.parse ('binary-instal ler-built-with-d ...
Paul

1
พอล exe ที่เขาอ้างถึงจะแตกต่างกันไปขึ้นอยู่กับว่าคุณใช้โปรแกรมติดตั้งตัวใด ... ไม่ใช่ "binary-installer-built-with-distutils.exe" อย่างแท้จริง
Tristan Reid

70

ฉันรู้ว่านี่เป็นคำถามเก่า ๆ และมีมาก่อนเครื่องมือที่ฉันกำลังจะพูดถึง แต่เพื่อประโยชน์ของ Google ฉันคิดว่าเป็นความคิดที่ดีที่จะพูดถึงมัน easy_install เป็นแกะดำของบรรจุภัณฑ์หลาม ไม่มีใครอยากยอมรับการใช้มันด้วยความร้อนแรงของ pip รอบตัว นอกจากนี้ในขณะที่เล่นเทคนิคการลงทะเบียนจะทำงานได้ดีที่สุดสำหรับตัวติดตั้ง 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


ขอบคุณสำหรับสิ่งนี้. หวังว่าจะมีคนสังเกตคำตอบของคุณและโหวตโหวตมากขึ้น!
Brett Stottlemyer

ต้องมีความชัดเจน. คุณสามารถสร้าง. wl จาก. exe ตัวอย่างเช่นจากlfd.uci.edu/~gohlke/pythonlibsด้วยสิ่งนี้ นี่เป็นเงื่อนไขการใช้งานที่ยิ่งใหญ่!
Jonas Gröger

ฉันพยายามทำสิ่งนี้ แต่ได้รับข้อผิดพลาดวงล้อแปลง numpy-MKL-1.8.1.win-amd64-py2.7.exe จากนั้น pip ติดตั้ง numpy-1.8.1-cp27-none-win_amd64.whl ฉันได้รับข้อผิดพลาดต่อไปนี้ การดาวน์โหลด / คลายไฟล์ numpy-1.8.1-cp27-none-win-amd64.whl ไม่พบการดาวน์โหลดใด ๆ ที่ตรงตามข้อกำหนด numpy-1.8.1-cp27-non e-win-amd64.whl ไม่พบการแจกแจงใด ๆ เลยสำหรับ numpy -1.8.1-cp27-none-win-amd64.whl
Paul

พยายามwheel install WHEELFILEแก้ไขคำตอบเพื่อชี้ให้เห็นถึงการมีอยู่ของสิ่งนั้น การแก้ไขปัญหาเฉพาะสำหรับใครบางคนไม่ใช่สิ่งที่ทำได้เล็กน้อยในความคิดเห็น SO
Tritium21

หลังจากต้องการ easy_install หลายครั้งเพื่อจุดประสงค์นี้เท่านั้นซึ่งก็สวยงาม * โบกมือลา easy_install
KobeJohn

40

ฉันลงทะเบียนสคริปต์ ( http://effbot.org/zone/python-register.htm ) เพื่อลงทะเบียนการติดตั้ง 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 คุณจะต้องมีสิทธิ์ของผู้ดูแลระบบ


1
บน Windows 7, 64 บิต, 64 บิต Python ต้องแก้ไข regpath เป็นregpath = "SOFTWARE\\Wow6432Node\\Python\\Pythoncore\\%s\\" % (version)
Oleksiy

จริงๆแล้วสำหรับ windows 7, 64 bit ของฉันฉันออกจาก regpath ตามที่เป็นอยู่และมันใช้งานได้ mod ที่ @Oleksiy แนะนำไม่ทำงาน อาจแตกต่างกันเล็กน้อยในเวอร์ชัน OS ของเราหรือการตั้งค่าบางอย่าง
พอล

โซลูชันของ @Ned Batchelder เป็นวิธีเดียวที่ใช้ได้ผลสำหรับฉัน การติดตั้งล้อไม่ทำงาน ฉันยังคงได้รับข้อผิดพลาดในการดาวน์โหลดแพ็กเกจ (ดูความคิดเห็นของฉันในคำตอบนั้นสำหรับรายละเอียดเพิ่มเติม) คำแนะนำในการทำ easy_install binary_installer ... อาจใช้งานได้ แต่ฉันไม่สามารถรับ easy_install เพื่อค้นหาไฟล์ binary_installer ... exe ได้
พอล

7

easy_install สามารถติดตั้งแพ็คเกจ. exe ได้ตราบเท่าที่สร้างขึ้นโดยใช้เป้าหมาย bdist_wininst ของ distutils ซึ่งครอบคลุมแพ็คเกจยอดนิยมมากมาย อย่างไรก็ตามมีคนอื่น ๆ อีกมากมายที่ไม่ได้ (wxPython เป็นสิ่งที่ฉันต่อสู้)


ใช่และตราบเท่าที่คุณติดตั้งแพ็คเกจการพัฒนาใด ๆ ของการอ้างอิงทั้งหมด ในกรณีของฉัน pycuda ต้องการ Boost และ CUDA ไม่ใช่เรื่องเล็กน้อย
Ned Batchelder

1
@Ned Batchelder ใช่และตราบใดที่คุณติดตั้งแพ็คเกจการพัฒนาใด ๆ ของการอ้างอิงทั้งหมด ตัวติดตั้งไบนารีไม่ได้ติดตั้งการอ้างอิงทั้งหมดหรือไม่?
Piotr Dobrogost

0

คุณสามารถใช้ easy_install ของสภาพแวดล้อมเพื่อติดตั้ง PyCUDA

dev-env-path/bin/easy_install pycuda

มันจะให้ 0.94rc เวอร์ชันเดียวกันกับคุณ

บน Windows easy_install.exe จะอยู่ในไดเรกทอรี Scripts


1
น่าเสียดายที่สิ่งนี้จะพยายามสร้างจากแหล่งที่มา ฉันหวังว่าจะใช้ไบนารีที่สร้างไว้ล่วงหน้า
Ned Batchelder

0

หากเป็น.msiคุณอาจระบุตัวเลือกบรรทัดคำสั่งได้โดยใช้msiexec. ตัวติดตั้ง Python เองก็อนุญาตTARGETDIRแต่ฉันไม่แน่ใจว่าสิ่งนี้ทำให้สิ่งนี้กลายเป็นตัวติดตั้งการแจกจ่ายหรือไม่

หากคุณใช้ a .exeฉันไม่คิดว่าจะมีวิธีที่สะอาด ทางเลือกหนึ่งคือใช้โปรแกรมเช่น 7Zip (หรือ winzip เป็นต้น) เพื่อดึงเนื้อหาของ exe โดยตรงจากนั้นคัดลอกโฟลเดอร์ที่เกี่ยวข้องไปยังโฟลเดอร์แพ็คเกจไซต์เสมือนของคุณ ตัวอย่างเช่นถ้าฉันแยก "processing-0.5.2.win32-py2.5.exe" ฉันพบโฟลเดอร์ "PLATLIB \ processing" ซึ่งฉันคัดลอกไปยังพา ธ Virtualenv และใช้โดยไม่มีปัญหารันไทม์ (ฉันไม่แน่ใจว่ามันจะง่ายขนาดนั้นเสมอไป)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.