Python pencere paketlerini virtualenv'lere kurabilir miyim?


125

Virtualenv harika: bir dizi farklı Python kurulumunu tutmama izin veriyor, böylece farklı projelerin bağımlılıklarının hepsi ortak bir yığına atılmıyor.

Ancak Windows'a .exe yükleyici olarak paketlenmiş bir paket yüklemek istersem, bunu virtualenv'e yüklemek için nasıl yönlendirebilirim? Örneğin, pycuda-0.94rc.win32-py2.6.exe var. Çalıştırdığımda, kayıt defterini inceler ve içine yüklenecek tek bir Python26 bulur, sanal ortamımın temel aldığı ortak olanı.

Virtualenv'e yüklemek için nasıl yönlendirebilirim?


1
aşağıdaki cevap benim için çalışıyor stackoverflow.com/questions/6114115/…
user1960422

Yanıtlar:


201

Evet yapabilirsin. Tum ihtiyacin olan sey

easy_install binary_installer_built_with_distutils.exe

Sürpriz? Görünüşe göre dağıtımlarla yapılan Windows için ikili yükleyiciler, .exe ile .zip'i tek bir .exe dosyasında birleştirir. Geçerli bir zip dosyası olduğunu görmek için uzantıyı .zip olarak değiştirin. Bunu sorumun yanıtlarını okuduktan sonra keşfettim Windows için psycopg2 ile ikili yumurtaları nereden indirebilirim?

GÜNCELLEME

Tritium21'in bugünlerde cevabında belirttiği gibi easy_install yerine pip kullanmalısınız. Pip, dağıtımlar tarafından oluşturulan ikili paketleri kuramaz, ancak yeni tekerlek biçiminde ikili paketleri yükleyebilir . Önce yüklemeniz gereken tekerlek paketini kullanarak eski formattan yenisine dönüştürebilirsiniz .


2
Katılıyorum, bu harika. Bu arada, 7zip'iniz varsa, .exe dosyasını zip olarak yeniden adlandırmanıza gerek kalmadan doğrudan açabilirsiniz.
Sabuncu

5
sadece bir ipucu: geliştiriciler, lfd.uci.edu/~gohlke/pythonlibs adresinden Windows için çeşitli yerleşik python paketlerini indirebilirler .
yangzh

@CodyHatch SO'daki tek cevabım bu değil ve diğer cevaplarımın da size yardımcı olma ihtimali var :)
Piotr Dobrogost

1
Aşağıdakileri alıyorum: Binary-installer-built-with-distutils.exe için arama pypi.python.org/simple/… Okuma pypi.python.org/simple/… 'binary_installer_built_with_distutils.exe' için dizin sayfası bulunamadı Tüm paketlerin dizini taranıyor (bu biraz zaman alabilir) pypi.python.org/simple okunuyor Binary-installer-built-with-distutils.exe için yerel paket veya indirme bağlantısı bulunamadı hatası: Requirement.parse için uygun dağıtım bulunamadı ('binary-instal ler-built-with-d ...
Paul

1
Paul, bahsettiği exe, kullandığınız yükleyiciye bağlı olarak farklı olacaktır ... tam anlamıyla "binary-installer-built-with-distutils.exe" değil
Tristan Reid

70

Bunun oldukça eski bir soru olduğunu ve bahsetmek üzere olduğum araçlardan önce geldiğini biliyorum, ancak Google'ın iyiliği için bundan bahsetmenin iyi bir fikir olduğunu düşünüyorum. easy_install, python paketlemesinin kara koyunudur. Hiç kimse onu yeni pipo sıcaklığıyla kullandığını kabul etmek istemez. Ayrıca, kayıt defteri hilelerini oynamak, standart olmayan EXE yükleyicileri için en iyi sonucu verirken (birisi dağıtımları kullanmak yerine yükleyiciyi kendisi oluşturdu ve yükleme yolu için kayıt defterini kontrol ediyor), artık standart EXE yükleyicileri için Daha İyi Bir Yol (c) var .

pip install wheel
wheel convert INSTALLER.EXE
pip install NEW_FILE_CREATED_IN_LAST_STEP.whl

Bu yazı itibariyle yakın zamanda tanıtılan tekerlek formatı, yumurta formatının yerine geçerek aynı rolü üstleniyor. Bu format aynı zamanda pip (virtualenv'inize zaten kurulu bir araç) tarafından desteklenir.

eğer herhangi bir nedenle pip install WHEELFILEişe yaramazsa, deneyinwheel install WHEELFILE


Bunun için teşekkürler. Umarım daha fazla insan cevabınızı fark eder ve oy verir!
Brett Stottlemyer

Açık olmak gerekirse. Bununla, bir .exe'den , örneğin lfd.uci.edu/~gohlke/pythonlibs'den bir .whl oluşturabilirsiniz . Bu BÜYÜK im dağıtım şartları!
Jonas Gröger

Bunu yapmaya çalıştım, ancak tekerlek dönüşümü numpy-MKL-1.8.1.win-amd64-py2.7.exe ve ardından pip install numpy-1.8.1-cp27-none-win_amd64.whl hatası aldım aşağıdaki hatayı alıyorum Numpy-1.8.1-cp27-none-win-amd64.whl indiriliyor / paketinden çıkarılıyor numpy-1.8.1-cp27-non e-win-amd64.whl gereksinimini karşılayan herhangi bir indirme bulunamadı. Numpy için hiç dağıtım bulunamadı -1.8.1-cp27-none-win-amd64.whl
Paul

deneyin wheel install WHEELFILE, yanıt bunun varlığını belirtmek için düzenlendi. Birisi için belirli bir sorunun hatalarını ayıklamak, SO yorumlarında önemsiz bir şekilde yapılan bir şey değildir.
Tritium21

Easy_install'a sadece bu amaç için pek çok kez ihtiyaç duyduktan sonra, bu çok güzeldi. * easy_install'a gözyaşlarıyla veda ediyor
KobeJohn

40

Kayıt defterine bir Python kurulumunu kaydetmek için bir komut dosyası ( http://effbot.org/zone/python-register.htm ) uyarladım . Ben olmak Python alabilirsiniz , kayıt defterinde Python, Windows yükleyiciyi çalıştırın ve ardından kayıt defteri geri ayarlayın:

# -*- 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()

Bu betiği kaydolmak istediğiniz Python ile çalıştırın ve kayıt defterine girilecektir. Windows 7 ve Vista'da Yönetici ayrıcalıklarına ihtiyacınız olacağını unutmayın.


1
Windows 7'de, 64 bit, 64 bit Python'da regpath'ı değiştirmek zorunda kaldıregpath = "SOFTWARE\\Wow6432Node\\Python\\Pythoncore\\%s\\" % (version)
Oleksiy

Aslında Windows 7, 64 bit için regpath'ı olduğu gibi bıraktım ve işe yaradı. @Oleksiy'in önerdiği mod işe yaramadı. Muhtemelen işletim sistemi sürümümüzde veya bazı ayarlarda bazı ince farklılıklar.
Paul

@Ned Batchelder'ın çözümü benim için çalışan tek çözümdü. Tekerlek montajı işe yaramadı. Hala paket indirme hataları alıyorum (daha fazla ayrıntı için bu yanıta ilişkin yorumuma bakın). Easy_install binary_installer ... yapma önerisi işe yaramış olabilir, ancak binary_installer ... exe dosyasını bulmak için easy_install alamadım.
Paul

7

easy_install, birçok popüler paketi kapsayan distutils'in bdist_wininst hedefi kullanılarak oluşturuldukları sürece .exe paketlerini kurabilir. Ancak, olmayan daha pek çok şey var (wxPython benim uğraştığım biri)


Evet, ve tüm bağımlılıkların hangi geliştirme paketini kurduğunuz sürece. Benim durumumda, Pycuda'nın Boost ve CUDA'ya ihtiyacı var, önemsiz bir girişim değil.
Ned Batchelder

1
@Ned Batchelder Evet, ve tüm bağımlılıkların hangi geliştirme paketini kurduğunuz sürece. İkili yükleyici de tüm bağımlılıkları yüklemez, değil mi?
Piotr Dobrogost

0

PyCUDA'yı kurmak için ortamın easy_install'unu kullanabilirsiniz.

dev-env-path/bin/easy_install pycuda

size aynı 0.94rc sürümünü verecektir.

Windows'ta easy_install.exe, Scripts dizininde olacaktır.


1
Ne yazık ki, bu kaynaktan oluşturmaya çalışacak. Önceden oluşturulmuş ikili dosyaları kullanmayı umuyordum.
Ned Batchelder

0

Eğer bir ise .msi, komut satırı seçeneklerini kullanarak belirtebilirsiniz msiexec. Python yükleyicisinin kendisi izin veriyor TARGETDIR, ancak dağıtımcıların bunu dağıtım yükleyicilerine pişirip pişirmediğinden emin değilim.

Eğer a kullanıyorsanız .exe, temiz bir yol olduğunu sanmıyorum. Bir seçenek, exe içeriğini doğrudan çıkarmak için 7Zip (veya winzip, vb.) Gibi bir program kullanmak, ardından ilgili klasörleri sanal site paketleri klasörünüze kopyalamaktır. Örneğin, "processing-0.5.2.win32-py2.5.exe" dosyasını açarsam, bir virtualenv yoluna kopyaladığım ve herhangi bir çalışma zamanı problemi olmadan kullandığım "PLATLIB \ processing" klasörünü bulurum. (Yine de her zaman bu kadar basit olduğundan emin değilim.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.