2011-08-22 6 views
17

काम करता है, मैंने उत्तर की तलाश की लेकिन उसे कोई नहीं मिला। मेरे पास वर्चुअल एनवी डीआईआर है, एक req.txt के साथ एक प्रोजेक्ट डीआईआर है। जब मैं pip -r req.txt चलाता हूं, तो यह कुछ ऐप्स को github (स्रोत) और कुछ pypi से इंस्टॉल करता है। वर्चुअल evn पर स्थानापन्न कॉल के बाद pypi के लोग ठीक हैं, हालांकि साइट-पैकेज में लिंक जो कि गिटूब से इंस्टॉल किए गए ऐप्स के लिंक अभी भी पुराने निर्देशिका स्थान को इंगित करते हैं।वर्चुअलएन्व स्थानांतरित करने योग्य - क्या यह वास्तव में

किसी और ने यह व्यवहार देखा है? इसके चारों ओर कोई त्वरित रास्ता? इसके अलावा, स्थानांतरित करने योग्य - वर्चुअलएव पर मूल रूप से उपयोग किए जाने वाले नो-साइट-पैकेज ध्वज का सम्मान नहीं कर रहा है। एक बार जब आप वर्चुअल को ले जाते हैं और इसे पुनः सक्रिय करते हैं, तो सब कुछ सिस्टम के साइट-पैकेज से दिखाई देता है। डॉक्स इस व्यवहार को एक तथ्य के रूप में इंगित करता है, इसलिए मैं सोच रहा हूं कि इसके आसपास कोई त्वरित तरीका है या नहीं?

+0

"वर्चुअल एनवी पर स्थानांतरित कॉल" क्या है? – hughdbrown

+0

कृपया अपने प्रश्नों के उत्तर स्वीकार करना याद रखें। आप सबसे सहायक के बगल में स्थित चेक मार्क पर क्लिक करके ऐसा करते हैं। कृपया वापस जाएं और अपने पुराने, उत्तर वाले प्रश्नों के लिए भी ऐसा करें। – agf

+0

मुझे समझ में नहीं आता कि आप अपने वर्चुअलएन्ड्स को चारों ओर क्यों ले जाना चाहते हैं। मैं बस उन्हें ~ ~/virtualenvs' में रखता हूं और मैं इसके साथ कर रहा हूं। कोई उपद्रव कोई अव्यवस्था नहीं। – hughdbrown

उत्तर

12

जैसा कि the documentation--relocatable में बताया गया है एक प्रयोगात्मक विकल्प है, इसलिए यह आश्चर्य की बात नहीं है कि आपको इसके साथ कठिनाइयों का सामना करना पड़ रहा है। उस ने कहा, क्या आपको नए पैकेज स्थापित करने के बाद --relocatable फिर से चलाने की याद है? यदि आपने -e के साथ github से संकुल अधिष्ठापित किए हैं, तो यह एक समस्या हो सकती है, क्योंकि यह साइट-पैकेज में स्थापित नहीं है, लेकिन इसमें सिमलिंक है। --relocatable उपयोग का एक विकल्प के रूप में, आप आमतौर पर virtualenv-विशिष्ट फ़ाइलों को मिटाने और जगह (जो मैं दो बार किया है जब प्लेटफार्मों के बीच स्विच) में इसे पुन: कर सकते हैं।

+0

में अपना उपयोगकर्ता नाम कड़ी-कोडित की, इसके अलावा, मैंने '--relocatable' का उपयोग किया है और यह ठीक है। बेशक, आपको यह सुनिश्चित करने के लिए स्थानांतरित करने से पहले इसे चलाने की ज़रूरत है कि कुछ भी याद नहीं है, जैसा कि आप कहते हैं। – Marcin

10

नहीं, एक '--relocatable' के लिए 'virtualenv/bin/activate' स्क्रिप्ट अद्यतन नहीं करता है। हां, आप ज़ेकेए के सुझाव के रूप में वर्चुअल एनवी सेटअप को फिर से चलाने के द्वारा इसे ठीक कर सकते हैं, हालांकि स्थिरता किसी भी 'pip -e git ...' को आयात करने में विफल रहता है जो 'virtualenv/src' में रखे गए हैं, इसलिए आपको फिर से चलना होगा उन पाइप मैन्युअल रूप से स्थापित करता है।

अनुभव से अब मैं एक दिन पीआईपी संपादन योग्य (-e) के साथ स्थापित नहीं करता हूं और यदि 'प्रोजेक्ट/वर्चुअलएएन/src' के विपरीत 'प्रोजेक्ट/src /' में मैन्युअल रूप से क्लोन रिपोजिटरी की आवश्यकता होती है और नीचे auto_prep_pythonpath.py स्क्रिप्ट है मेरी प्रोजेक्ट लॉन्च करने से पहले लोड किया गया (मैं इसे अपने django.wsgi स्क्रिप्ट में संदर्भित करता हूं)।

एक साइड नोट के रूप में मैं 'प्रोजेक्ट/src' में रखे गए किसी भी पैकेज को 'अनुरूप' जोड़ता हूं जो संशोधित/हैक किया जाता है, इस तरह मुझे पिछड़े संगतता के बारे में चिंता करने की ज़रूरत नहीं है और मैं कोड नियंत्रण के तहत सभी स्रोतों को ट्रैक करता हूं ऑनलाइन भंडार आप पर ब्रेक कर सकते हैं और करेंगे।

उम्मीद है कि इससे मदद मिलती है।

""" 
Prepares python path to include additional project/src/<APP> in PYTHONPATH - This file gets automatically loaded by projects __init__.py 

This script lives in 'project/src/django-project/auto_prep_pythonpath.py', modify 
'SOURCE_ROOT' if you place it somehwere else. 
""" 
import logging 
import os 
import sys 
SOURCE_ROOT = os.path.dirname(os.path.abspath(__file__)).replace('\\','/') # the replacements are when on windows 
SOURCE_ROOT = os.path.join(SOURCE_ROOT, '../').replace('\\','/') 
SOURCE_ROOT = os.path.normpath(SOURCE_ROOT) 

logger = logging.getLogger(__name__) 

logger.info("Adding packages in 'src/*' required by project to PYTHONPATCH.") 
dirlist_arr = os.listdir(SOURCE_ROOT) 
while dirlist_arr: 
    item_path = os.path.join(SOURCE_ROOT, dirlist_arr.pop()).replace('\\','/') # replace dashes is for win based file system 
    if os.path.isdir(item_path): 
     if not item_path in sys.path: 
      sys.path.insert(0, item_path) # we use insert to take precedence over any global paths - minimises import conflict suprises 
     logger.debug("Path '%s' added." % item_path) 
संबंधित मुद्दे