1 votos

el nombre global 'arcpy' no está definido

Estoy escribiendo un script que llama a una función que escribí en otro script. No puedo acceder a la ruta env de python instalada por lo que debo guardar mis scripts en otra ubicación. Para conseguir que un script llame a otro, tengo que usar sys.path.append(r "pathToPythonFiles") y luego importar el script como un módulo y luego llamar a la función.

Principal script:

import sys
import arcpy
import os

sys.path.append(r"N:\Common\Script\Drivers")

import CO_181_ExStMetal as sMetal

sMetal.exportMetal()

script con función invocable:

def exportMetal():

    # Create program variables

    # workspace
    mxd = arcpy.mapping.MapDocument(r"C:\RS_Data\Workspace\Batch_Carts_CO_181\Batch_Carts_CO_181.mxd")

    # dataframe
    df = arcpy.mapping.ListDataFrames(mxd,"Layers")[0]

    # field for SearchCursor
    numField = 'Route'

    # feature layer for cursor
    lyr = arcpy.mapping.Layer(r"C:\RS_Data\Workspace\Batch_Carts_CO_181\gisdb\layers.gdb\Service_Location")

    # create empty set to hold unique route values
    rtVals = set()

    # Create searchCursor
    cursor = arcpy.SearchCursor(lyr)
    for row in cursor:
        rtVals.add(row.getValue(numField))

    scenario = max(rtVals)

    path = r"S:\Shared\RouteSmart\Automated_BIC_and_Carts\CO_181\Standish_Yard\Metal"

    outNameCarts = os.path.join(path, ("Metal_Report.pdf"))
    print outNameCarts

    rlfCarts = r"N:\Common\Report Templates\CO_181_Metal.rlf"

    reportCarts = arcpy.mapping.ExportReport(lyr,rlfCarts,outNameCarts, "USE_RLF")

if __name__ == '__main__':

    exportMetal()

Este es el error:

Traceback (most recent call last):
  File "C:\Python27\ArcGIS10.2\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 323, in RunScript
    debugger.run(codeObject, __main__.__dict__, start_stepping=0)
  File "C:\Python27\ArcGIS10.2\Lib\site-packages\pythonwin\pywin\debugger\__init__.py", line 60, in run
    _GetCurrentDebugger().run(cmd, globals,locals, start_stepping)
  File "C:\Python27\ArcGIS10.2\Lib\site-packages\pythonwin\pywin\debugger\debugger.py", line 654, in run
    exec cmd in globals, locals
  File "N:\Common\Script\Drivers\sys_test.py", line 1, in <module>
    import sys
  File "N:\Common\Script\Drivers\CO_181_ExStMetal.py", line 10, in exportMetal
    import arcpy
NameError: global name 'arcpy' is not defined

He probado a importar arcpy en la parte superior de script 2 antes de definir exportMetal() como global y luego también localmente dentro de la función. También he probado después de if nombre \==' principal ':

Me preocupa que una vez que pongo la ruta del sistema en el script el programa no puede encontrar arcpy que está instalado en la ruta env de python.

0voto

Lucas Puntos 128

Esto no es realmente un ArcGIS arcpy tema. Obtendrá el mismo error si intenta utilizar cualquier módulo/paquete de Python que no haya importado (en el ámbito correcto).

Necesitas importar arcpy en la parte superior de tu módulo (o en la parte superior de cualquier script que utilice el paquete arcpy)

es decir

# Test.py
import sys

sys.path.append(r"N:\Common\Script\Drivers")
import CO_181_ExStMetal as sMetal
sMetal.exportMetal()

# CO_181_ExStMetal.py

import arcpy   # <--- import here

def exportMetal():

    # All your code

    # Just to show it works:
    print(arcpy.ProductInfo())
    print(arcpy.GetInstallInfo()['ProductName'])

if __name__ == '__main__':
    exportMetal()

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X