2017-03-12 23 views
8

का सम्मान करने के लिए कैसे करें मैं एक बहुत ही मजबूत वातावरण में काम कर रहा हूं जहां विभिन्न मशीनों के पास विभिन्न वितरित फ़ाइल सिस्टम तक पहुंच है।पीपी को "सीसी" पर्यावरण परिवर्तनीय

  • मशीन AX फाइल सिस्टम के लिए पहुँच गया है और फाइल सिस्टम Y पर सॉफ़्टवेयर स्थापित करने के लिए प्रयोग किया जाता है।
  • मशीन B फाइल सिस्टम Y तक पहुंच है, लेकिन X नहीं है।

मैं मशीन B पर काम कर रहा हूं, और मैं खुद को पाइथन का उपयोग कर पाता हूं। कभी-कभी, मुझे उन पैकेजों की आवश्यकता होती है जिन्हें पूर्वस्थापित नहीं किया जाता है, इसलिए मैं उन्हें स्थानीय रूप से स्थापित करने के लिए pip install PKGXYZ --user का उपयोग करता हूं। यह आमतौर पर अच्छी तरह से काम करता है, लेकिन एक पकड़ है।

अजगर संकुल distutils और उसके बंदर समझौता व्युत्पन्न setuptools जो pip द्वारा उपयोग किया जाता distutils.sysconfig कार्यक्षमता का उपयोग संकलक संस्करणों, रास्तों में से काबू पाने, और somesuch करने के लिए। इसके लिए, वे आंतरिक Makefile का उपयोग करते हैं जिसका उपयोग पायथन स्थापित करने के लिए किया गया था। हालांकि यह आम तौर पर एक अच्छी रणनीति है, यह मेरे कंक्रीट सेटअप के साथ विफल रहता है, क्योंकि पाइथन आंतरिक Makefile में पथ फाइल सिस्टम X पर इंगित करते हैं, जिनके पास मेरी मशीन B पर पहुंच नहीं है।

import re 
import sys 
import os 
cc = os.getenv("CC") 
if not cc: 
    print("please set CC environment variable!") 
    exit(0) 
from distutils.sysconfig import get_config_vars 
for k,v in get_config_vars().iteritems(): 
    try: 
     if "fsX" in v: 
      newv = re.sub(r'/fsX/[^ ]*/g[c+][c+]',cc,v) 
      get_config_vars()[k] = newv 
    except TypeError: 
     pass 

ऐसी है कि मैं की डिफ़ॉल्ट सेटिंग्स को ओवरराइट करना CC वातावरण चर का उपयोग कर सकते हैं: इसलिए, मैं अपने आप को pip की --no-clean विकल्प का उपयोग करने और संकुल मैं इस तरह के टुकड़े के साथ स्थापित करना चाहते हैं के setup.py हैकिंग लगता है पाइथन Makefile से कंपाइलर पथ जो मेरी मशीन पर काम करता है।

हालांकि, यह एक बदसूरत हैक है। ऐसा करने के लिए निश्चित रूप से एक अच्छा तरीका होना चाहिए और pip कुछ पर्यावरण चर, कॉन्फ़िगरेशन फ़ाइल या कमांड लाइन विकल्प के माध्यम से कुछ अलग कंपाइलर का उपयोग करना चाहिए। या वहाँ है?

उत्तर

1

ऐसा लगता है कि आपके पास सिस्टम बी पर कंपाइलर टूल्स हैं, इसलिए एक विकल्प स्थानीय उपकरणों का उपयोग करके आपके सिस्टम पर पायथन को फिर से बनाना होगा और इसके बजाय इसका उपयोग करना होगा।

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

आप आसानी से एक नया पायथन इंस्टॉल और निर्माण कर सकते हैं। उदाहरण के लिए लिनक्स पर पायथन 3.5.1 के लिए:

cd 
mkdir src 
mkdir -p local/python351 
cd src 
wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz 
tar -xf Python*.tgz 
cd Python-3.5.1 
./configure --prefix ~/local/python351 
make 
make install 
+0

इस प्रतिक्रिया के लिए धन्यवाद। एक कस्टम पायथन संस्करण बनाने के दौरान निश्चित रूप से एक विकल्प है, मैं वास्तव में एक पैकेज लिख रहा हूं जो कि पाइथन पैकेज पर निर्भर करता है जिसे प्राप्तकर्ताओं द्वारा स्थापित करने की आवश्यकता होगी, इसलिए मुझे इस मुद्दे के लिए कुछ आसान निर्देशों को प्रदान करने की आवश्यकता होगी। मेरी राय में, अपने स्वयं के पायथन संस्करण को संकलित करना इस मुद्दे के लिए बहुत अधिक है। – carsten

+1

और सभी प्राप्तकर्ताओं के पास एक ही समस्या होगी, कि उनके अजगर प्रतिष्ठान अब अनुपलब्ध उपकरण के साथ बनाए गए थे? यह मेरे लिए थोड़ा पागल लगता है, और शायद अगर आपकी कंपनी में मशीनों को कॉन्फ़िगर किया गया है तो आपको इसे ठीक करने में देखना चाहिए, क्योंकि ऐसा लगता है कि भविष्य में आपको भविष्य में और भी समस्याएं हो सकती हैं। क्या आप शायद शेड्यूल किए गए पायथन अपग्रेड में बदलाव नहीं कर सकते? – daphtdazz

+0

हां, सभी प्राप्तकर्ताओं के पास एक ही समस्या होगी। और हाँ, यह थोड़ा पागल है।और हां, सेटअप का एक फिक्स चल रहा है, लेकिन तैनात किए जाने वाले महीनों के आदेश पर होगा, जबकि जिस सॉफ्टवेयर पर मैं काम कर रहा हूं वह सप्ताहों के आदेश पर तैनात किया जाएगा। तो हमें एक कार्यकारी मध्यवर्ती समाधान की आवश्यकता है। – carsten

संबंधित मुद्दे