Desde conda crear requisitos.txt para pip3

7 minutos de lectura

Avatar de usuario de ITA
ITA

Usualmente uso conda para administrar mis entornos, pero ahora estoy en un proyecto que necesita un poco más de potencia que mi computadora portátil. Así que estoy tratando de usar las estaciones de trabajo de mi universidad que tienen nuevos Intel Xeon. Pero no tengo derechos de administrador y la estación de trabajo no tiene conda, por lo que me veo obligado a trabajar con virtualenv y pip3.

¿Cómo genero un requirements.txt de conda que funcionará con pip3 y venv?

conda list -e > requirements.txt

no genera un archivo compatible:

= is not a valid operator. Did you mean == ?

El conda la salida es:

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: osx-64
certifi=2016.2.28=py36_0
cycler=0.10.0=py36_0
freetype=2.5.5=2
icu=54.1=0
libpng=1.6.30=1
matplotlib=2.0.2=np113py36_0
mkl=2017.0.3=0
numpy=1.13.1=py36_0
openssl=1.0.2l=0
pip=9.0.1=py36_1
pyparsing=2.2.0=py36_0
pyqt=5.6.0=py36_2
python=3.6.2=0
python-dateutil=2.6.1=py36_0
pytz=2017.2=py36_0
qt=5.6.2=2
readline=6.2=2
scikit-learn=0.19.0=np113py36_0
scipy=0.19.1=np113py36_0
setuptools=36.4.0=py36_1
sip=4.18=py36_0
six=1.10.0=py36_0
sqlite=3.13.0=0
tk=8.5.18=0
wheel=0.29.0=py36_0
xz=5.2.3=0
zlib=1.2.11=0

Pensé que simplemente cambiaría manualmente todo = a == pero hay dos = en la salida de conda. ¿Cuál cambiar? Seguramente hay una manera más fácil?

EDITAR: pip freeze > requirements.txt da:

certifi==2016.2.28
cycler==0.10.0
matplotlib==2.0.2
matplotlib-venn==0.11.5
numpy==1.13.1
pyparsing==2.2.0
python-dateutil==2.6.1
pytz==2017.2
scikit-learn==0.19.0
scipy==0.19.1
six==1.10.0

  • puedes usar ‘pip freeze’ en tu computadora

    – Eugenio

    9 jun 2018 a las 19:41

  • Pero las salidas son diferentes, quiero decir que el comando conda tiene más paquetes que la salida de pip freeze.

    – ITA

    9 jun 2018 a las 19:45

  • eso parece un poco extraño, pero por lo general puede editar el rewuiremrnts.txt a mano como último recurso. otra opción en pipenv, un envoltorio alrededor de pip y virtualenv

    – Eugenio

    9 de junio de 2018 a las 19:53

  • No, ninguno si está funcionando. Me parece tan extraño que esto no se puede hacer. Sí, tal vez sea poco común que las personas cambien entre administradores de entornos, pero aún así… la necesidad es concebible.

    – ITA

    9 junio 2018 a las 20:10

  • No estoy seguro, no veo una respuesta completa; en el sentido de que ha explicado lo que hacen las herramientas, pero no hay solución por lo que veo en cómo para replicar un entorno conda con éxito con virtualenv de pipenv.

    – ITA

    17 de junio de 2018 a las 15:11

avatar de usuario de rmwenz
rmwenz

Como indica el comentario en la parte superior, la salida de

conda list -e > requirements.txt

se puede utilizar para crear un conda entorno virtual con

conda create --name <env> --file requirements.txt

pero esta salida no está en el formato correcto para pip.

Si desea un archivo que pueda utilizar para crear un pip entorno virtual (es decir, un requirements.txt en el formato correcto) puede instalar pip dentro de conda entorno, luego use pip para crear requirements.txt.

conda activate <env>
conda install pip
pip freeze > requirements.txt

Luego usa el resultado requirements.txt para crear un pip ambiente virtual:

python3 -m venv env
source env/bin/activate
pip install -r requirements.txt

Cuando probé esto, los paquetes no eran idénticos en las salidas (pip incluía menos paquetes) pero era suficiente para configurar un entorno funcional.

Para aquellos que obtienen referencias de rutas extrañas en requisitos.txt, use:

pip list --format=freeze > requirements.txt

  • Esta es la mejor respuesta y debería ser la respuesta aceptada, porque proporciona comandos específicos para realizar/responder la pregunta SO original.

    – Rich Lysakowski Doctorado

    23 de marzo de 2020 a las 3:30

  • Para aquellos que siguen este hilo y obtienen referencias de rutas extrañas en requirements.txtusar pip list --format=freeze > requirements.txt en cambio. Ref: stackoverflow.com/a/62886215/13095028

    – tnwei

    5 de febrero de 2021 a las 2:17

  • @JohnnyUtah cuidado allí. La creación de un entorno totalmente vacío no incluirá pip y asi tu recomendacion terminaria instalando todos esos paquetes afuera el entorno de destino previsto. Además, el OP claramente está preguntando acerca de pasar a un sistema que no tiene Conda en primer lugar, de ahí el turno de pip y venv.

    – merv

    12 de abril de 2021 a las 3:36

  • Ah, buen punto @merv. ¿Podría instalar explícitamente pip después de crear y activar el entorno Conda y antes de ejecutar pip install -r requirements.txt?

    – JohnnyUtah

    14 abr 2021 a las 15:48

  • Si está usando conda, la mejor opción es usar conda env export > environment.ymlconfirme su environment.yml y luego conda env create -f environment.yml.

    – Jugando con BI

    3 de noviembre de 2021 a las 13:39

Avatar de usuario de Pascal
Pascal

Problema

En un ambiente conda con simplemente llamar

pip freeze

Producción:

ipykernel @ file:///C:/ci/ipykernel_1607454116140/work/dist/ipykernel-5.3.4-py3-none-any.whl
ipython @ file:///D:/bld/ipython_1612487184680/work
...

Formato buscado:

ipykernel==5.3.4
ipython==7.20.0
...

Solución

en un entorno conda activado tuve que usar

pip list --format=freeze

para obtener el formato correcto para generar un archivo de requisitos para las personas que prefieren usar pip con entornos virtuales.

Guardar en archivo:

pip list --format=freeze > requirements.txt

  • ¡Funciona perfectamente! Solo usa pip list --format=freeze > requirements.txt .Para almacenar la lista de paquetes como un archivo requirements.txt en el directorio del proyecto.

    – Pam César

    1 de junio de 2021 a las 4:02


Avatar de usuario de Evgeny
evgeny

Después de la discusión, me gustaría mencionar que en realidad se puede ver cierta separación de pip y conda papeles

pip es un administrador de paquetes estándar, hace una cosa y la hace bien. requirements.txt puede ser generado en un entorno e instalado por pip en un nuevo entorno.

Ahora hay conda salida: correctamente capturas su comentario que dice ‘generamos esta lista de bibliotecas para trabajar con conda’. Tenga en cuenta que python en sí está en la lista conda y (correctamente) no en requirements.txt. conda replica su propia instalación, es por eso que su lista de bibliotecas es más larga y tiene python.

pip produce una lista de paquetes que se instalaron encima de la biblioteca estándar para que el paquete que escribiste funcione. Espero que ayude a distinguir entre los dos.

También pipenv es una herramienta más nueva, que puede hacer tanto el entorno virtual como la gestión de paquetes por usted.

  • pipenv sigue siendo una herramienta sobre la base de Python, al igual que pip. No manejará los requisitos. afuera de Pitón. Para eso es conda, para manejar esa imagen más grande, vea ¿Cuál es la diferencia entre pip y conda?

    – Martijn Pieters

    19 de julio de 2018 a las 10:17

  • Si bien esta respuesta proporciona información útil adicional, no proporciona comandos reales para usar con conda y pip.

    – Rich Lysakowski Doctorado

    23 de marzo de 2020 a las 3:29

En caso de que alguien esté buscando generar requisitos.txt de un proyecto existente en conda, use lo siguiente

  • Ir a su entorno de proyecto conda activate <env_name>

  • conda list le da una lista de paquetes utilizados para el medio ambiente

  • conda list -e > requirements.txt guarde toda la información sobre los paquetes en su carpeta

  • conda env export > <env_name>.yml

  • pip freeze

Como se mencionó en los comentarios anteriores, la respuesta completa correcta es:

pip list --format=freeze > requirements.txt

activa la conda env
conda activate flask-test

obtenga la ruta del conda env y cópielo
conda list

agregar la ruta copiada con lib\site-packages y usarlo en pip con --path opción
pip freeze --path C:\Users\username\Miniconda3\envs\flask-test\lib\site-packages > requirements.txt

en Linux la ruta es como /home/username/miniconda3/envs/flask-app/lib/python3.8/site-packages/

avatar de usuario de tensordt
tensordt

Hice un script de python simple para convertir requisitos de conda.txt para pip3. Simplemente copie el código a continuación.

f = open(r"requirements.txt", "r").read()
f1 = f.split("\n")
for line in f1:  
    if "=" in line:
       a = line.split("=")[0:-1]
       print(a[0]+"==" + a[1])

luego simplemente copie la salida impresa;

Salida de muestra:

_libgcc_mutex==0.1
_openmp_mutex==4.5
blas==1.0
brotli==1.0.9
bzip2==1.0.8

¿Ha sido útil esta solución?