2012-09-13 20 views
8

Principalmente trabajo actualmente con Python 2.7 y Django 1.3.3 (alojado en Heroku) y tengo varios proyectos que mantengo. He estado trabajando en un escritorio con Ubuntu ejecutándose dentro de un VirtualBox, pero recientemente tuve que hacer un viaje y quería tener todo cargado en mi computadora portátil. Pero, lo que descubrí rápidamente fue que virtualenv + Github es realmente fácil para crear proyectos, pero tuve problemas para intentar moverlos a mi computadora portátil. El enfoque que se me ocurrió fue crear un nuevo virtualenv y luego clonar el código de github. Pero no pude hacerlo en la carpeta que realmente quería porque diría que la carpeta no está vacía. Por lo tanto, lo clonaría en una carpeta tmp que cortar/pegar todo en donde realmente lo quería. No es TERRIBLE, pero siento que me falta algo aquí y que debería ser más fácil. Tal vez clonar primero, luego mkvirtualenv?Migración de virtualenv y Github entre computadoras

No es un problema de aplastamiento, pero estoy pensando en hacer algunos cambios más (como obtener el paseo de la VirtualBox y simplemente ir con un sistema de arranque Dual) y sería genial si pudiera hacerlo un poco más suave. :)

Finalmente, encontré y leí algunas publicaciones sobre cómo mover repositorios git entre computadoras, pero no vi ningún trato con Virtualenv (tal vez me lo perdí).

EDIT: Para ser claro y evitar confusiones, no intento "mover" el virtualenv. Solo estoy hablando de la mejor manera de crear uno nuevo. Instale los paquetes y clone el repositorio de github.

+0

"Pero no pude hacerlo en la carpeta que realmente quería porque diría que la carpeta no está vacía". - ¿Estás haciendo el virtualenv tu repositorio de git? Como en, son 'bin /' (el que tiene 'activate') y' .git' en el mismo directorio? – delnan

+0

Sí ... .git, bin, requirements.txt están todos en el mismo nivel. Bin no está registrado en el repositorio. Luego tengo una carpeta llamada "src" en el mismo nivel y debajo es donde está mi fuente. –

Respuesta

1

Lo bueno de un virtualenv es que puedes describir cómo hacer uno, y puedes hacerlo repetidamente en múltiples plataformas.

Por lo tanto, en lugar de clonar todo, clone un método para crear virtualenv consistentemente, y tenerlo en su repositorio de git. De esta forma evitará nasties específicos de la plataforma.

+0

Interesante ... pero, por favor perdone mi ignorancia, no estoy seguro de entenderlo exactamente. ¿Podría dar más detalles? ¿O podría proporcionar un enlace? Gracias por su respuesta. –

+0

Creo que quiere decir: use un archivo requirements.txt y cree un script de shell que ejecute la última parte de [matt b answer] (http://stackoverflow.com/a/12410239/1521064): 'virtualenv' para crear, 'fuente' para activar,' pip' para instalar. – vault

3

Además de crear una nueva virtualenv de scripts, debe crear un archivo requirements.txt que tenga todas sus dependencias (por ejemplo, Django1.3), luego puede ejecutar pip install -r requirements.txt y esto instalará todas sus dependencias por usted.

Incluso puede tener pip crear esto para usted haciendo pip freeze > stable-req.txt que imprimirá sus dependencias como en su actual virtualenv. Luego puede mantener los requisitos .txt bajo control de versión.

+0

Gracias por la respuesta. Yo entiendo esa parte. Me gustaría señalar que puede ser un poco desafiante con una máquina completamente nueva, ya que se encontrará con problemas con los módulos que se deben construir (como psycopg2, django-pylibmc-sasl). Pero, una vez que haya instalado todos los archivos "dev", entonces instale desde el archivo requirements.txt definitivamente es el camino a seguir. –

+0

Vi esto que puede ayudarlo a moverse por los módulos que necesitan construirse: http://blip.tv/djangocon/taming-dependencies-with-pip-5582996 vale la pena verlo – Ctrlspc

+0

@DavidS no puede instalar esos dependencias con pip? Puedo encontrar ambos con 'pip search'. Ponerlos en 'requirements.txt' significa que se requiere menos trabajo para nuevos desarrolladores/configuraciones. –

9

Eso es porque ni siquiera se supone que debes mover virtualenvs a diferentes ubicaciones en un sistema (hay soporte de reubicación, pero es experimental), y mucho menos de un sistema a otro. Crear un nuevo virtualenv:

  • Instalar virtualenv en el otro sistema
  • Obtener una requirements.txt, ya sea escribiendo una o almacenando la salida de pip freeze (y la edición de la salida)
  • Mover el requirements.txt a el otro sistema, cree un nuevo virtualenv e instale las bibliotecas a través del pip install -r requirements.txt.
  • Clonar el repositorio git en el otro sistema

Para necesidades más avanzadas, puede crear un script de arranque que incluye código de virtualenv + encargo de establecer cualquier otra cosa.

EDIT: Tener la raíz del virtualenv y la raíz de su repositorio en el mismo directorio me parece una idea bastante mala. Coloque el repositorio en un directorio dentro de la raíz virtualenv, o póngalos en árboles completamente separados.No solo evitas git (con razón, por lo general, todo lo que no ha sido rastreado por git es un juego justo para eliminar) quejándose de los archivos existentes, también puedes usar virtualenv para múltiples repositorios y evitar colisiones de nombres.

+0

Solo como nota, no me estoy moviendo ... Estoy creando un nuevo virtualenv. Editaré la pregunta original para que quede más clara. –

+0

Además ... ¿qué haces con la clonación? Para mí, git se queja porque la carpeta de destino no está vacía. Parece que la respuesta de Matt B maneja eso, pero tú no. ¿O me estoy perdiendo algo? –

+0

@DavidS generalmente desea crear un virtualenv * dentro * de cada uno de sus proyectos, es decir, dentro del directorio clonado. De esta forma, puede tener virtualenvs separados y aislados para múltiples proyectos, todos en la misma máquina. –

14

El único flujo de trabajo que debe necesitar es:

git clone repo_url somedir 
cd somedir 
virtualenv <name of environment directory> 
source <name of environment directory>/bin/activate 
pip install -r requirements.txt 

Esto supone que ha ejecutado pip freeze > requirements.txt (mientras que el Venv se activa) para listar todas las bibliotecas virtualenv-pip-instalado y verificado en el repositorio.

Cuestiones relacionadas