2012-06-08 5 views

Odpowiedz

48

Mam obecnie prywatny serwer, konto powłoki i trochę szczęścia . Więc tutaj jest to, co robię:

  1. SSH do hosta uaktualnić Python

    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. systemu Konfiguracja do korzystania z naszego nowego Python. Otwarte ~/.bashrc i dodać następującą linię

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

    można teraz sprawdzić wersję Pythona z which python

  3. Install 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. Install virtualenv

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

    można również dodać ścieżkę env do bashrc

    export PATH="$HOME/<site>/env/bin/:$PATH" 
    source ~/.bashrc 
    
  5. Instalacja Django i wszystkiego innego

    pip install django 
    pip install .... 
    pip install .... 
    pip install .... 
    
  6. Tworzenie projektu

    cd $HOME/<site>/ 
    python $HOME/<site>/env/bin/django-admin.py startproject project 
    
  7. Tworzenie passenger_wsgi.py w HOME/<site>/ z następującą zawartością

    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() 
    

lub tędy

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) 

Jeśli używasz Django 1.7, należy wymienić dwie ostatnie linię

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

Nowa wersja Pythona na Dreamhost nie będzie już powrotu sys.executable więc to jest moja wersja 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

Nicea, dzięki za dzielenie się. –

+4

Byłoby wspaniale, jeśli ktoś może napisać skrypt automatyzacji –

+0

my nie utworzyliśmy żadnego katalogu projektu wewnątrz env, czy my? sys.path.insert (0, '$ HOME//env/project') pobieranie Wystąpił błąd podczas importowania pliku passenger_wsgi.py nawet po/projekcie z tego) –

1

Obecnie Dreamhost zaktualizowane serwery do Ubuntu 12.04 i mam błąd:

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

po kompilacji niestandardowego python i uruchomieniu "python ez_setup.py”

Rozwiązaniem było skompilować Pythona z --enable-unicode = ucs4 w kroku 1

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

Dziękuję. Czy powinienem zaktualizować moją odpowiedź –

+1

* nie wiem * Należy również powiedzieć, że obecna domyślna wersja pythona na "happy hostingu" == 2.7.3, ale Django jest wciąż stara, więc używam twoich kroków do tworzenia virtualenv. To działa dobrze! Dziękuję Ci! –