2012-06-08 21 views

Respuesta

48

Actualmente tengo servidor privado, una cuenta shell y un poco de suerte . Así que aquí es lo que hago:

  1. SSH a su anfitrión para actualizar pitón

    cd ~ 
    mkdir tmp 
    cd tmp 
    wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz 
    tar zxvf Python-2.7.3.tgz 
    cd Python-2.7.3 
    ./configure --enable-shared --prefix=$HOME/Python27 --enable-unicode=ucs4 
    make 
    make install 
    
  2. Configuración del sistema para utilizar nuestro nuevo Python. Open ~/.bashrc y añada la siguiente línea

    export PATH="$HOME/Python27/bin:$PATH" 
    export LD_LIBRARY_PATH=$HOME/Python27/lib 
    
    #save it and run 
    source ~/.bashrc 
    

    ahora se puede comprobar la versión del pitón con which python

  3. Instalar easy_install, pip

    cd ~/tmp 
    wget http://peak.telecommunity.com/dist/ez_setup.py 
    python ez_setup.py 
    easy_install pip 
    # Or even shorter 
    wget https://bootstrap.pypa.io/get-pip.py 
    python get-pip.py 
    
  4. Instalar virtualenv

    pip install virtualenv 
    virtualenv $HOME/<site>/env 
    #Switch to virtualenv 
    source $HOME/<site>/env/bin/activate 
    

    también se puede agregar la ruta env para bashrc

    export PATH="$HOME/<site>/env/bin/:$PATH" 
    source ~/.bashrc 
    
  5. Instalar Django y todo lo demás

    pip install django 
    pip install .... 
    pip install .... 
    pip install .... 
    
  6. Crear proyecto

    cd $HOME/<site>/ 
    python $HOME/<site>/env/bin/django-admin.py startproject project 
    
  7. Crear passenger_wsgi.py en HOME/<site>/ con contenido siguiente

    import sys, os 
    cwd = os.getcwd() 
    sys.path.append(cwd) 
    sys.path.append(cwd + '/project') #You must add your project here or 500 
    
    #Switch to new python 
    #You may try to replace $HOME with your actual path 
    if sys.version < "2.7.3": os.execl("$HOME/<site>/env/bin/python", 
        "python2.7.3", *sys.argv) 
    
    sys.path.insert(0,'$HOME/<site>/env/bin') 
    sys.path.insert(0,'$HOME/<site>/env/lib/python2.7/site-packages/django') 
    sys.path.insert(0,'$HOME/<site>/env/lib/python2.7/site-packages') 
    
    os.environ['DJANGO_SETTINGS_MODULE'] = "project.settings" 
    import django.core.handlers.wsgi 
    application = django.core.handlers.wsgi.WSGIHandler() 
    

o esta forma

import sys, os 

BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 

sys.path.append(os.path.join(BASE_DIR)) #You must add your project here or 500 

#Switch to new python 
#You may try to replace $HOME with your actual path 
PYTHON_PATH = os.path.join(BASE_DIR, 'env', 'bin', 'python') 
if sys.executable != PYTHON_PATH: 
    os.execl(PYTHON_PATH, "python2.7.12", *sys.argv) 

Si está utilizando Django 1.7, vuelva a colocar los dos últimos línea con

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 
  1. Disfrute: D

Nueva versión del pitón en Dreamhost ya no volver sys.executable por lo que esta es mi versión de passenger_wsgi

import sys, os 

VIRTUAL_ENV_PYTHON = 'venv-python' # Python > 2.7.6 dreamhost not return sys.executable 
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 

def is_venv_python(): 
    if len(sys.argv) > 0: 
     last_item = sys.argv[len(sys.argv)-1] 
     if last_item == VIRTUAL_ENV_PYTHON: 
      return True 
    return False 

sys.path.append(os.path.join(BASE_DIR)) #You must add your project here or 500 

#Switch to new python 

PYTHON_PATH = os.path.join(BASE_DIR, 'env', 'bin', 'python') 
if not is_venv_python(): 
    os.execl(PYTHON_PATH, "python2.7.12", *sys.argv + [VIRTUAL_ENV_PYTHON]) 

sys.path.insert(0, os.path.join(BASE_DIR, 'env', 'bin')) 
sys.path.insert(0, os.path.join(
    BASE_DIR, 'env', 'lib', 'python2.7', 'site-packages' 
)) 
+1

Niza guía, gracias por compartir. –

+4

Sería muy bueno si alguien puede escribir un script de automatización que –

+0

no creó ningún directorio de proyecto dentro de env, ¿verdad? sys.path.insert (0, '$ HOME//env/project') obteniendo un error al importar su passenger_wsgi.py incluso después de/project desde ese) –

1

Actualmente Dreamhost servidores actualizados a Ubuntu 12.04, y tengo un error:

Import Error: <path-to-python>/_io.so undefined symbol: PyUnicodeUCS2_Decode 

después de compilar python personalizado y ejecutar "python ez_setup".py"

La solución fue compilar Python con --enable-Unicode = ucs4 en el paso 1

./configure --enable-shared --prefix=$HOME/Python27 --enable-unicode=ucs4 
+0

Gracias. ¿Debo actualizar mi respuesta? –

+1

* no sé * También debe decirse, esa versión actual de python en "happy hosting" == 2.7.3, pero Django todavía es viejo, así que utilizo los pasos para crear virtualenv. ¡Funciona bien! ¡Gracias! –