Soy bastante nuevo en Python virtualenvs y Emacs. Quería tratar de mantener los paquetes de Python que uso para verificar y formatear el código (flake8 y black) de los paquetes que usa mi base de código real (por ejemplo, numpy, etc.).

Mi idea era crear dos virtualenvs separados (con pyenv), uno para los paquetes necesarios para las extensiones de Emacs y otro para el resto de mi código.

Estoy usando el paquete de Emacs elpy; después de instalar blacken, el formateo automático por black funcionó de inmediato. Incluso cuando estaba en mi proyecto-venv y el negro estaba instalado en mi emacs-venv.

Flycheck no tuvo tanta suerte; tiene dificultades para encontrar el ejecutable flake8. Poner lo siguiente en mi archivo de inicio de Emacs no hace nada; parece, por defecto, el ejecutable de Python en mi actual virtualenv.

(setq flycheck-python-flake8-executable <PATH>) 

Sin embargo, puedo obtener el ejecutable adecuado al pasar por el modo interactivo Emacs.

M-x flycheck-set-checker-executable RET python-flake8 RET <PATH>

Verifico el estado del verificador y dice que 'se puede habilitar' pero cuando uso el comando de habilitación interactivo responde 'el verificador no se puede usar en este búfer'.

0
aosborne 1 may. 2020 a las 10:08

2 respuestas

mantener los paquetes de Python que uso para verificar y formatear el código (flake8 y negro) de los paquetes que usa mi base de código real

Es por defecto de esta manera. Los shebangs del script de entrada black y flake8 especifican la ruta absoluta de Python:

$ head -n1 $(which black)
#!/usr/bin/python3.8
$ head -n1 $(which flake8)
#!/usr/bin/python3.8
0
RafalS 1 may. 2020 a las 07:45

Escribí esta pregunta tarde en la noche y no hice un buen trabajo explicando lo que quería. Mi objetivo era que pip freeze no generara paquetes de python no relacionados con la base de código de mi proyecto.

Después de pensar más en esto, encontré una forma más directa de obtener lo que quería (en lugar de tener múltiples virtualenvs).

  1. Instale flake8 (o cualquier otra cosa) en el virtualenv de su proyecto.

  2. Utilice pigar para generar su lista de requisitos en función de las importaciones.

Aquí hay un breve Makefile; make freeze.

# Use pigar to generate 'pip freeze' requirements based on imports, no comments.
freeze:
    pigar -p .tmpreqs --without-referenced-comments
    tail -n +3 .tmpreqs > requirements.txt
    rm .tmpreqs
0
aosborne 1 may. 2020 a las 14:36