2 votos

Cómo configurar el entorno Python para LaunchDaemons

He instalado Python 3 a través de Homebrew, en mi sistema Mojave, y lo tengo symlinked a /usr/local/bin/python .

Tengo un plist de LaunchDaemon como el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>test</string>
        <key>ProgramArguments</key>
        <array>
          <string>python</string>
          <string>--version</string>
        </array>
        <key>RunAtLoad</key><true/>
        <key>KeepAlive</key><true/>

        <key>EnvironmentVariables</key>
        <dict>
            <key>PATH</key>
            <string>/usr/local/bin/python3</string>
            <key>PYTHONPATH</key>
            <string>/usr/local/lib/python3.7/site-packages</string>
        </dict>

        <key>StandardOutPath</key>
        <string>/var/log/test.log</string>
        <key>StandardErrorPath</key>
        <string>/var/log/test_err.log</string>

    </dict>
</plist>

Sin embargo, esto todavía devuelve Python 2.7.10 que está instalado por defecto en el sistema Mojave.

¿Cómo configuro la ruta de este LaunchDaemon para que tenga acceso al entorno de Python 3?


Información adicional:

Para el plist completo que estoy utilizando, el programa llama a Python en algún momento (Python no es el punto de entrada), por lo que requiere el PYTHONPATH para que apunte a los paquetes del sitio donde se han instalado algunos paquetes adicionales.

El error que aparece allí es:

Your PYTHONPATH points to a site-packages dir for Python 3.x but you are running Python 2.x!
     PYTHONPATH is currently: "/usr/local/lib/python3.7/site-packages"
     You should `unset PYTHONPATH` to fix this.

0 votos

¿Qué es? /usr/local/bin/python3 ? ¿Un archivo o una carpeta? ¿No debería el PATH se establezca la variable /usr/local/bin si su binario Python es /usr/local/bin/python ?

0 votos

Oh, eso es un archivo - he probado a ponerlo sólo en /usr/local/bin pero no tuve suerte con eso...

0 votos

3voto

Michael Zhou Puntos 167

Te sugiero que utilices una ruta absoluta en ProgramArguments, así

    <key>ProgramArguments</key>
    <array>
    <string>python</string>

se convertiría en

    <key>ProgramArguments</key>
    <array>
    <string>/usr/local/bin/python3</string>
    ..........

Su variable PATH no es correcta. Cámbiela por

    <key>PATH</key>
    <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>

0 votos

Ten en cuenta que si el script no llama a un comando externo no necesitas la entrada PATH en el plist de lanzamiento

-1voto

john Puntos 11

Dado que tienes más de una versión de Python en tu máquina, deberías crear definitivamente entornos virtuales o aquí. . Crea uno para cada versión de Python que tengas y luego puedes activar el entorno virtual para cualquier versión de Python que desees ejecutar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple 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