अलग पायथन इंस्टॉलेशन बनाना जो आर्कपी कह सकता है?


28

मुझे बहुत सारे प्रश्नोत्तर मिलते हैं और पूछते हैं कि आप एक अलग पायथन इंस्टॉलेशन कैसे बना सकते हैं (जैसे एनाकोंडा या पायथन एक्सवाई वितरण) जो आर्कपी का उपयोग कर सकते हैं, जबकि मूल आर्कगिस पायथन इंस्टॉलेशन को 'ब्रेकिंग' नहीं करते।

मुझे भी यही समस्या थी, और मुझे लगता है कि मुझे 'सार्वभौमिक' समाधान मिल गया है। अब तक हमने काम पर लगभग 8 कंप्यूटरों पर ऐसा किया है और यह सब ठीक काम करता है।

एक अलग पायथन वितरण कैसे स्थापित करें जो आर्कगिस का उपयोग कर सकता है?

जवाबों:


37

मैंने एक छोटा (और अपेक्षाकृत लोकप्रिय) मॉड्यूल बनाया जो बंद हो जाता है और आपके पीसी पर आर्कगिस के लिए शिकार करता है। एक बार खोजने के बाद यह पर्यावरण के लिए सही रास्ते जोड़ता है ताकि आप आर्कपी आयात कर सकें। उपयोग इस प्रकार है:

try:
    import archook #The module which locates arcgis
    archook.get_arcpy()
    import arcpy
except ImportError:
    # do whatever you do if arcpy isnt there.

मॉड्यूल को यहाँ github पर होस्ट किया गया है: https://github.com/JamesRamm/archook

यह बहुत सरल है और मुझे यकीन है कि इसे और अधिक मजबूत बनाया जा सकता है, लेकिन यह काम करता है। यह pypi पर उपलब्ध है:pip install archook

अधिक 'मैनुअल' मूल विधि (नीचे विस्तृत) पर इसके कुछ फायदे हैं:

  1. आपको प्रत्येक अजगर पर्यावरण को अलग से कॉन्फ़िगर करने की आवश्यकता नहीं है ... बस मॉड्यूल आयात करें और आप चले जाएं
  2. यह किसी भी रजिस्ट्री कुंजी या स्थायी पर्यावरण चर को संपादित / बनाता नहीं है, इसलिए किसी भी मौजूदा अजगर / आर्कगिस कॉन्फ़िगरेशन को गड़बड़ाने का कोई मौका नहीं है।
  3. आपको विभिन्न फ़ोल्डरों / फ़ाइलों के लिए पथों के बारे में कुछ भी जानने की आवश्यकता नहीं है, या यहां तक ​​कि आपके द्वारा इंस्टॉल किए गए आर्कगिस का भी क्या संस्करण है। मॉड्यूल आप के लिए यह सब मिल जाएगा।
  4. कोई व्यवस्थापक प्रमाणीकरण की आवश्यकता है
  5. यह एनाकोंडा के साथ विशिष्ट नहीं है - यह किसी भी अजगर स्थापना के साथ काम करेगा

मैंने नीचे मूल उत्तर छोड़ दिया है, लेकिन यह समाधान (IMO) 100% बेहतर है।


2014 का जवाब

ठीक है, इसलिए यह जवाब विंडोज 7 / विंडोज सर्वर पर आर्कगिस 10.1 64 बिट के साथ एनाकोंडा 64 बिट पायथन वितरण के लिए काम करता है। नीचे दिए गए सुझावों में से कुछ (या सभी) अजगर के किसी भी अन्य विंडोज़ वितरण पर लागू हो सकते हैं। सबसे पहले, एनाकोंडा स्थापित करें, यह निर्देशिका C: \ Anaconda पर जाना चाहिए। बॉक्स 'सिस्टम डिफॉल्ट डिफ़ॉल्ट अजगर' की जाँच करें। यह एक चेतावनी दे सकता है कि एक और अजगर स्थापित है, लेकिन जारी है। फिर:

सेटअप पथ और पर्यावरण चर

पहली बात यह है कि DTBGGP64.pth फ़ाइल को C: \ Python27 \ ArcGISx6410.1 \ Lib \ साइट-पैकेज से नई वितरण निर्देशिका ( C: \ Anaconda ) में कॉपी करें । नामकरण अस्वाभाविक है, लेकिन इसका .pth विस्तार होना चाहिए। यह आपको नए वितरण का उपयोग करते समय आर्कपी आयात करने की अनुमति देगा। नोट: DTBGGP64.pth फ़ाइल का सही स्थान साइट-पैकेज निर्देशिका (जैसे C: \ Anaconda \ Libs \ site-package ) में होना चाहिए। मैंने पाया है कि एनाकोंडा के कुछ पुराने संस्करणों के साथ, यह काम करता है यदि शीर्ष स्तर की निर्देशिका में बैठा है , तो पर्यावरण चर की जाँच की जानी चाहिए: सिस्टम चर पथ मेंअजगर मार्ग के लिए मौजूदा पथ को नए पथ से बदला जाना चाहिए। (उदा। C: \ Anaconda; C: \ Anaconda \ Scripts; ) यह उन विंडो को बताएगा जहाँ डिफ़ॉल्ट पायथन डायरेक्टरी है। सुनिश्चित करें कि उपयोगकर्ता चर PYTHONPATH भी सही है। यह आपके द्वारा उपयोग की जाने वाली किसी भी लाइब्रेरी को इंगित करना चाहिए जो कि .pth फ़ाइलों द्वारा वर्णित नहीं हैं या साइट-संकुल में स्थापित हैं । IE यह आपके खुद के विकास पैकेज, या मेकनिक जैसे पैकेज हो सकते हैं, जिनकी एक अलग स्थापना स्थान है।

रजिस्ट्री सेटिंग्स की जाँच करें

कुछ मशीनों पर, उपरोक्त यह सुनिश्चित करने के लिए पर्याप्त हो सकता है कि आप नए अजगर से आर्कपी का उपयोग कर सकते हैं और उस अजगर को आर्कजीआईएस के भीतर इस्तेमाल किया जा सकता है। अन्य मशीनों पर, आपको रजिस्ट्री कुंजियों की जांच करने की आवश्यकता हो सकती है। निम्न रजिस्ट्री कुंजियों में अजगर सेटिंग हैं:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
एक कुंजी होनी चाहिए और इसका मान C: \ Anaconda \ Lib होना चाहिए ; C: \ Anaconda / DLL (या आपके पायथन इंस्टॉलेशन के लिए संगत फ़ोल्डर);

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
कुंजी C: \ Anaconda होनी चाहिए

आपके पास अन्य पायथन संस्करण स्थापित हो सकते हैं ... जिस स्थिति में उपरोक्त पथों में संस्करण संख्या बदल जाती है

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon यह .pyc फ़ाइलों के लिए उपयोग करने के लिए .ico फ़ाइल का स्थान है।

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ कमांड यह शेल से .pyc फ़ाइल खोलने पर जारी करने का आदेश है। आपको python.exeअपने इच्छित अजगर संस्करण के स्थान का मार्ग बदलना चाहिए

HKEY_CLASSES_ROOT \ Python.File यहाँ कुंजियाँ Python.CompiledFile के लिए समान हैं, सिवाय इसके कि वे एक .py फ़ाइल पर लागू होती हैं। फिर से, प्रासंगिक परिवर्तन करें। इसमें 'एडिट विद आईडीएल' या 'एडिट विद पायथनविन' की अतिरिक्त कुंजी हो सकती है। फिर से, प्रासंगिक परिवर्तन करें ताकि इन कुंजियों में पथ आपके इच्छित अजगर संस्करण की ओर इंगित करें।

HKEY_CLASSES_ROOT \ Python.NoConFile ये Python.File के लिए समान हैं, लेकिन pythonw.exeजहां उचित हो, उस प्रोग्राम को इंगित करना चाहिए ।

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1 PythonDir के प्रमुख बिंदु हैं, जो ArcMap आदि के भीतर उपयोग करने के लिए अजगर की स्थापना
की ओर इशारा करते हैं .. आप चाहें तो ESRI द्वारा स्थापित अजगर के रूप में बने रह सकते हैं, या इसे अपने नए संस्थापन की ओर इंगित कर सकते हैं। यदि आप नए अजगर स्थापना के लिए आर्केप को इंगित करते हैं तो इसमें अन्य परिवर्तनों की आवश्यकता हो सकती है। वहाँ हो सकता है संकुल के संस्करणों (जैसे numpy) नए वितरण द्वारा स्थापित के साथ मुद्दों हो। मेरा कोई सामना नहीं हुआ है।

मेरे अधिकांश काम के लिए, यह अप्रासंगिक है क्योंकि मैं आमतौर पर अजगर का उपयोग करना चाहता हूं और यह कभी-कभी चापलूसी तक पहुंच रखता है। मैं शायद ही कभी arcmap के भीतर से अजगर का उपयोग करना चाहता हूं..कहां तक ​​कि मैंने इस अंतिम चरण का थोड़ा परीक्षण नहीं किया है, लेकिन यह मेरे द्वारा अब तक की कोशिश की गई हर चीज के लिए काम करता है।

मैं कल्पना करता हूं कि पायथन (x, y) आदि को स्थापित करने के लिए प्रक्रिया समान होगी।

अन्य नोट

.Pth फ़ाइल की सामग्री आपके ArcGIS इंस्टॉलेशन में निम्नलिखित फ़ोल्डरों को इंगित करने वाले रास्तों की एक सूची है: Bin64, arcpy, ArcToolbox \ Scripts उदाहरण के लिए, मेरी .pth फ़ाइल में निम्न शामिल हैं:

C:\Program Files (x86)\ArcGIS\Desktop10.2\bin64
C:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy
C:\Program Files (x86)\ArcGIS\Desktop10.2\ArcToolbox\Scripts


क्या यह उन सभी पायथन आश्रितों को स्थापित करता है जिनका आर्कगिस के पास है? matplotlib, numpy, xlrd, xlwt और dateutil?
KHibma

हाँ। एनाकोंडा वितरण के लिए, पैकेजों की एक पूरी सूची यहां देखी जा सकती है: डॉक्स.कॉन्टिनमू .io / anaconda / pkgs.html मैं अजगर (एक्स, वाई) या अन्य वितरणों से परिचित नहीं हूं
जेम्स

2
मत भूलो कि आर्कजीआईएस (10.2 और 10.1) के पास खस के लिए बहुत विशिष्ट संस्करण आवश्यकताएं हैं - 1.6.1 होना चाहिए या आप आर्कपी को तोड़ सकते हैं।
user2856

1
कृपया DTBGGP64.pth फ़ाइल की सामग्री जोड़ें! कई उपयोगकर्ताओं को यह प्रतीत नहीं होता है। :)
mmann1123

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

5

मेरा समाधान एक स्टार्टअप स्क्रिप्ट स्थापित करना है जो आपके द्वारा उपयोग किए जा रहे अजगर पर्यावरण पर आधारित पथ का सेट करता है। इस विधि का (बहुत बड़ा) फायदा है कि आपको python स्थापनाओं में .pth फ़ाइलों को लिखने के लिए व्यवस्थापक पहुँच की आवश्यकता नहीं है। यह स्क्रिप्ट 32 बिट और 64 बिट एनाकोंडा और आर्कजीआईएस / आर्कपी दोनों का उपयोग करने के लिए सेटअप है।

    # Startup script to link Anaconda python environment with ArcGIS
    #
    # 1. Install Anaconda, setup environment to match your ArcGIS version
    # 2. Edit the paths below
    # 3. Put this startup script in the startup folder as "usercustomize.py"
    #    Startup folder can be found with: "C:\Python27\ArcGIS10.2\python -m site --user-site"
    #    Usually will be:
    # C:\Users\%USERNAME%\AppData\Roaming\Python\Python27\site-packages

    import sys
    import os

    # edit these paths to match your setup
    arcver = "10.2"
    # Anaconda home folders
    conda32 = r"D:\Users\cprice\Anaconda"
    conda64 = r"D:\Users\cprice\Anaconda64"
    # here are the conda environments you've set up use with ArcGIS
    # arc1022 is the environment setup for ArcGIS
    conda_env32 = "{}/envs/{}".format(conda32, "arc1022")
    conda_env64 = "{}/envs/{}".format(conda64, "arc1022")

    # do not edit below this line

    # ArcGIS Python home folders
    # i.e. C:\Python27\ArcGIS10.2
    arcver = arcver[:4]
    arcpy32 = r"C:\Python27\ArcGIS{}".format(arcver)
    arcpy64 = r"C:\Python27\ArcGISx64{}".format(arcver)

    try:
        if sys.version.find("64 bit") < 0:
            conda_path = os.path.normpath(conda_env32)
            arcpy_path = os.path.normpath(arcpy32)
            arcpy_pthfile = os.path.normpath(
                arcpy_path + "/lib/site-packages/desktop{}.pth".format(arcver))
        else:
            conda_path = os.path.normpath(conda_env64)
            arcpy_path = os.path.normpath(arcpy64)
            arcpy_pthfile = os.path.normpath(
                arcpy_path + "/lib/site-packages/DTBGGP64.pth")

        for p in [conda_path, arcpy_path, arcpy_pthfile]:
            if not os.path.exists(p):
                raise Exception("{} not found".format(p))

        ## print(sys.prefix)
        ## print(conda_path)

        # If running ArcGIS's Python, add conda modules to path
        if (sys.executable.lower().find("desktop" + arcver) != -1
            or sys.prefix.lower().find("arcgis10") != -1):
            sys.path.append(os.path.dirname(arcpy_path))
            conda_site = os.path.join(conda_path, "lib", "site-packages")
            if not os.path.isdir(conda_site):
                raise Exception()
            sys.path.append(conda_site)
            print("usercustomize.py: added conda paths to arc")

        # if running Anaconda add arcpy to path
        elif sys.prefix.lower() == conda_path.lower():
            with open(arcpy_pthfile, "r") as f:
                sys.path +=  [p.strip() for p in f.readlines()]
            print("usercustomize.py: added arcpy paths to conda")

    except Exception as msg:
        print(msg)
        pass

आप इस स्ट्रैपअप स्क्रिप्ट को virtualenv के लिए अन्य .py स्क्रिप्ट में कैसे सेट / कॉल कर रहे हैं? उदाहरण के लिए, यदि आपके पास केवल एक .py स्क्रिप्ट है जो "arcpy.CopyFeatures_management ('myinput.shp', 'myoutput.shp')" है? पाठ्यक्रम का सरलीकृत उदाहरण। किसी भी सलाह के लिए Thx
एलेक्सस 1

3

अगर कोई ऐसा करने की कोशिश कर रहा है तो आर्कगिस प्रो (अजगर 2 के बजाय अजगर 3 के साथ) का उपयोग कर रहा है:

मैं एनाकोंडा पैकेज के भीतर स्पाइडर का उपयोग करता हूं। जिस तरह से मुझे यह काम करने के लिए मिला था वह था स्पाइडर में टूल्स> पाइथन इंटरप्रेटर के पास जाकर, फिर वर्तमान में C: \ Program Files \ ArcGIS \ Pro \ bin \ Python's Scripts \ propy.bat पर स्थित Propy.bat फ़ाइल में स्पाइडर को इंगित करता है।

यह स्पाइडर में सही अजगर संस्करण को सक्रिय करता है और आपको आर्कपी आयात करने की अनुमति देता है।


1

मैं एक अलग वर्चुअल वातावरण सेटअप करने के लिए निम्न कोड का उपयोग करता हूं , जिसमें आर्कपी और यह निर्भरताएं हैं:

set "VENV_PATH=C:\VirtualEnvs\MyArcPyEnv"
set "PYTHON=C:\Python27\ArcGIS10.3"

mklink /J %VENV_PATH%\Lib\site-packages\arcpy "C:\Program Files (x86)\ArcGIS\Desktop10.3\arcpy\arcpy"
mklink /J %VENV_PATH%\Lib\site-packages\numpy %PYTHON%\Lib\site-packages\numpy

mklink /J %VENV_PATH%\Lib\site-packages\matplotlib C:\Python27\ArcGIS10.3\Lib\site-packages\matplotlib
mklink /J %VENV_PATH%\Lib\site-packages\dateutil %PYTHON%\Lib\site-packages\dateutil
mklink /J %VENV_PATH%\Lib\site-packages\mpl_toolkits %PYTHON%\Lib\site-packages\mpl_toolkits

copy %PYTHON%\Lib\site-packages\pyparsing.py  %VENV_PATH%\Lib\site-packages
copy %PYTHON%\Lib\site-packages\pylab.py %VENV_PATH%\site-packages
copy %PYTHON%\Lib\site-packages\netcdftime.py %VENV_PATH%\Lib\site-packages
copy %PYTHON%\Lib\site-packages\netCDF4_utils.py %VENV_PATH%\Lib\site-packages

REM Only one of the following .pth files will exist (dependent on x64 or x32)

copy %PYTHON%\Lib\site-packages\Desktop10.3.pth %VENV_PATH%\Lib\site-packages
copy %PYTHON%\Lib\site-packages\DTBGGP64.pth %VENV_PATH%\Lib\site-packages
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.