क्या मैं पायथन विंडो पैकेज को virtualenvs में स्थापित कर सकता हूं?


125

वर्चुअनव महान है: यह मुझे कई अलग-अलग पायथन इंस्टॉलेशन रखने देता है ताकि विभिन्न प्रोजेक्ट्स की निर्भरता सभी एक साथ एक आम ढेर में न फेंकें।

लेकिन अगर मैं विंडोज पर एक पैकेज स्थापित करना चाहता हूं जो एक .exe इंस्टॉलर के रूप में पैक किया गया है, तो मैं इसे virtualenv में स्थापित करने के लिए कैसे निर्देशित कर सकता हूं? उदाहरण के लिए, मेरे पास pycuda-0.94rc.win32-py2.6.exe है। जब मैं इसे चलाता हूं, तो यह रजिस्ट्री की जांच करता है, और स्थापित करने के लिए केवल एक पायथन 26 ढूंढता है, आम यह कि मेरा वर्चुअन बंद है।

मैं इसे virtualenv में स्थापित करने के लिए कैसे निर्देशित कर सकता हूं?


1
नीचे दिए गए जवाब मेरे लिए काम करता है stackoverflow.com/questions/6114115/…
user1960422

जवाबों:


201

हाँ तुम कर सकते हो। जो तुम्हे चाहिए वो है

easy_install बाइनरी_इंस्टालर_बिल्ट_with_distutils.exe

आश्चर्य चकित? यह विंडोज के लिए द्विआधारी इंस्टालर जैसा दिखता है। डिस्टुटिल्स के साथ बनाया गया ।exe एक .exe फ़ाइल में .zip के साथ। एक मान्य ज़िप फ़ाइल देखने के लिए .zip में एक्सटेंशन बदलें। मुझे अपने प्रश्न के उत्तर पढ़ने के बाद यह पता चला कि मैं विंडोज के लिए psycopg2 के साथ बाइनरी अंडे कहां से डाउनलोड कर सकता हूं?

अपडेट करें

जैसा कि ट्रिटियम 21 ने अपने जवाब में कहा है कि आजकल आपको easy_install के बजाय पाइप का उपयोग करना चाहिए। पिप डिस्टुटिल द्वारा बनाए गए बाइनरी पैकेज को स्थापित नहीं कर सकता है लेकिन यह नए व्हील प्रारूप में बाइनरी पैकेज स्थापित कर सकता है । आप पुराने प्रारूप से नए को व्हील पैकेज का उपयोग करके बदल सकते हैं , जिसे आपको पहले स्थापित करना होगा।


2
मैं सहमत हूं, यह बहुत अच्छा है। वैसे, अगर आपके पास 7zip है, तो आप सीधे .exe खोल सकते हैं, बिना ज़िप के नाम बदले।
सबुनकु

5
बस एक टिप: डेवलपर्स lfd.uci.edu/~gohlke/pythonlibs से खिड़कियों के लिए विभिन्न निर्मित अजगर पैकेज डाउनलोड कर सकते हैं ।
यंग्ज़

@CodyHatch आप यह कर सकते हैं क्योंकि यह SO पर मेरा एकमात्र उत्तर नहीं है और एक मौका है कि मेरे कुछ अन्य उत्तर आपके लिए उपयोगी होंगे :)
Piotr Dobrogost

1
मुझे निम्न मिलते हैं: बाइनरी-इंस्टॉलर-इन-बिल्ट- डिस्टुटिल्स के लिए खोज। पढ़ना pypi.python.org/simple/… रीडिंग pypi.python.org/simple/ ... ' बाइनरी-इंस्टॉलर_बुलेट_विथ_डाइट_डिस्टुटिल्स ' के लिए इंडेक्स पेज नहीं खोज सका सभी पैकेजों के स्कैनिंग इंडेक्स (इसमें थोड़ा समय लग सकता है) पढ़ना pypi.python.org/simple कोई स्थानीय पैकेज नहीं है या बाइनरी-इंस्टॉलर के साथ निर्मित लिंक के लिए डाउनलोड किए गए लिंक। त्रुटि: आवश्यकता के लिए उपयुक्त वितरण नहीं मिल सकता है। ('बाइनरी-इंस्टाल लेर-बिल्ट-इन-डी ...
पॉल

1
पॉल, एक्सई वह जिस संदर्भ की बात कर रहे हैं वह भिन्न होगा कि आप किस इंस्टॉलर का उपयोग कर रहे हैं उसके आधार पर ... नहीं सचमुच "बाइनरी-इंस्टॉलर-साथ-डिस्टुटिल्स।"
ट्रिस्टन रीड

70

मुझे पता है कि यह काफी पुराना प्रश्न है, और उन उपकरणों को पहले से ही बता देता हूं जिनके बारे में मैं बात करने वाला हूं, लेकिन Google के लिए, मुझे लगता है कि इसका उल्लेख करना एक अच्छा विचार है। easy_install अजगर पैकेजिंग की काली भेड़ है। कोई भी व्यक्ति पाइप की नई गर्माहट के साथ इसका उपयोग नहीं करना चाहता है। इसके अलावा, रजिस्ट्री चालें खेलते समय गैर-मानक EXE इंस्टॉलर के लिए सबसे अच्छा काम करेगा (किसी ने डिस्टिल्स का उपयोग करने के बजाय स्वयं इंस्टॉलर बनाया, और इंस्टॉलेशन पथ के लिए रजिस्ट्री की जांच कर रहा है), मानक EXE इंस्टॉलरों के लिए अब एक बेहतर तरीका (c) है ।

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

पहिया प्रारूप, इस पोस्ट के रूप में हाल ही में पेश किया गया, अंडा प्रारूप के लिए प्रतिस्थापन है, एक ही भूमिका को भरते हुए। यह प्रारूप पाइप (आपके वर्चुअन में पहले से इंस्टॉल किया गया एक उपकरण) द्वारा भी समर्थित है।

अगर किसी कारण से pip install WHEELFILEकाम नहीं करता है, तो कोशिश करेंwheel install WHEELFILE


इसके लिए धन्यवाद। उम्मीद है कि अधिक लोग आपके उत्तर और अपवोट को नोटिस करेंगे!
ब्रेट स्टॉटलिमर

स्पष्ट होना। आप एक। Exe से .whl बना सकते हैं, उदाहरण के लिए lfd.uci.edu/~gohlke/pythonlibs , इसके साथ। यह तैनाती का बहुत बड़ा पद है!
जोनास ग्रोगर

मैंने ऐसा करने की कोशिश की, लेकिन एक त्रुटि पहिया कन्वर्ट किया गया खतना-एमकेएल-1.8.1.win-amd64-py2.7.exe फिर पाइप स्थापित करें 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 सभी वितरणों के लिए उपलब्ध है -1.8.1-cp27-none-win-amd64.whl
पॉल

कोशिश करो wheel install WHEELFILE, उस के अस्तित्व को इंगित करने के लिए संपादित जवाब। किसी व्यक्ति के लिए एक विशिष्ट समस्या का डीबग करना एसओ टिप्पणियों में मामूली रूप से नहीं किया गया है।
ट्रिटियम 21

केवल इस उद्देश्य के लिए इतनी बार easy_install की आवश्यकता के बाद, वह सुंदर था। *
आँसू की

40

मैंने रजिस्ट्री में अजगर स्थापना को पंजीकृत करने के लिए एक स्क्रिप्ट ( http://effbot.org/zone/python-register.htm ) को समाप्त किया । मैं रजिस्ट्री में अजगर होने के लिए पायथन को चुन सकता हूं , विंडोज इंस्टॉलर चला सकता हूं , फिर रजिस्ट्री को वापस सेट कर सकता हूं :

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

इस स्क्रिप्ट को उस पायथन के साथ चलाएं जिसे आप पंजीकृत करना चाहते हैं, और इसे रजिस्ट्री में दर्ज किया जाएगा। ध्यान दें कि विंडोज 7 और विस्टा पर, आपको प्रशासक विशेषाधिकारों की आवश्यकता होगी।


1
विंडोज 7 पर, 64 बिट, 64 बिट पायथन के साथ रीपैथ को संशोधित करना थाregpath = "SOFTWARE\\Wow6432Node\\Python\\Pythoncore\\%s\\" % (version)
ओलेक्सी

वास्तव में मेरी विंडोज़ 7, 64 बिट के लिए, मैंने रेजपाथ को छोड़ दिया है और यह काम किया है। Mod @Oleksiy ने सुझाव दिया कि काम नहीं किया गया। संभवतः हमारे ओएस संस्करण में कुछ सूक्ष्म भिन्न, या कुछ सेटिंग।
पॉल

@ निद बथेल्डर का समाधान एकमात्र ऐसा था जो मेरे लिए काम करता था। पहिया स्थापना काम नहीं किया। मुझे अभी भी पैकेज डाउनलोड त्रुटियां प्राप्त हुईं (अधिक विस्तार के लिए उस उत्तर पर मेरी टिप्पणी देखें)। Easy_install बाइनरी_इंस्टालर करने का सुझाव ... ने काम किया हो सकता है लेकिन मैं बाइनरी_इंस्टालर ... exe फ़ाइल को खोजने के लिए easy_install प्राप्त करने में सक्षम नहीं था।
पॉल

7

easy_install तब .exe पैकेज स्थापित करने में सक्षम है, जब तक कि वे डिस्टिल्स के bdist_wininst लक्ष्य का उपयोग करके बनाए गए थे, जो कई लोकप्रिय पैकेजों को कवर करता है। हालाँकि, कई अन्य हैं जो नहीं हैं (wxPython एक है जिसे मैंने संघर्ष किया है)


हां, और जब तक आपने सभी आश्रितों के विकास पैकेज को स्थापित किया है। मेरे मामले में pycuda को Boost और CUDA की जरूरत है, न कि एक तुच्छ उपक्रम की।
नेड बाचेल्ड जुले

1
@Ned Batchelder हाँ, और जब तक आपने सभी आश्रितों के विकास पैकेज को स्थापित किया है। खैर, बाइनरी इंस्टॉलर न तो सभी निर्भरताएं स्थापित करता है, न ही करता है?
पियोट्र डोब्रोगोस्ट

0

आप PyCUDA को स्थापित करने के लिए पर्यावरण के easy_install का उपयोग कर सकते हैं।

dev-env-path/bin/easy_install pycuda

यह आपको एक ही संस्करण 0.94rc देगा।

Windows में easy_install.exe लिपियों निर्देशिका में होगा।


1
दुर्भाग्य से, यह स्रोत से निर्माण करने का प्रयास करेगा। मैं पूर्व-निर्मित बायनेरिज़ का उपयोग करने की उम्मीद कर रहा था।
नेड बाचेल्ड जुले

0

यदि यह एक है .msi, तो आप कमांड लाइन विकल्प का उपयोग करने में सक्षम हो सकते हैं msiexec। अजगर इंस्टॉलर खुद की अनुमति देता है TARGETDIR, लेकिन मुझे यकीन नहीं है कि अगर डिस्ट्रीब्यूटर्स इसे वितरण इंस्टॉलर में ले जाते हैं।

यदि आप एक का उपयोग कर रहे हैं .exe, मुझे नहीं लगता कि एक साफ तरीका है। एक विकल्प 7Zip (या winzip, आदि) जैसे प्रोग्राम का उपयोग करके सीधे exe की सामग्री को निकालने के लिए है, फिर relevent फ़ोल्डरों को अपने वर्चुअल साइट-पैकेज फ़ोल्डर में कॉपी करें। उदाहरण के लिए, यदि मैं "प्रसंस्करण-0.5.2.win32-py2.5.exe" निकालता हूं, तो मुझे एक "PLATLIB \ प्रसंस्करण" एक फ़ोल्डर मिलता है जिसे मैं एक virtualenv पथ पर कॉपी करता हूं और बिना किसी रनटाइम समस्याओं के उपयोग करता हूं। (मुझे यकीन नहीं है कि यह हमेशा इतना आसान है।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.