2010-11-23 6 views
0

debian vps avec gigatux. en utilisant django/python avec mod_wsgi et im en utilisant virtualenvs comme j'espère héberger quelques sites différents qui peuvent être à différents niveaux.l'importation de modules python/django échoue sur debian vps

im avoir un problème obtenir le fonctionnement du site, je ne peux pas le faire même en ce moment un syncdb car il refuse d'importer le package django qui se trouve dans le dossier site-packages

J'ai la déclaration ci-dessous dans mon fichier django.wsgi qui est appelé à partir de la ligne de configuration wsgi dans apache2/sites disponibles/default

import sys 
sys.path.append('/home/shofty/virtualenvs/sitename/lib/python2.5/site-packages') 

et j'ai un certain nombre de paquetages dans ce dossier.

Toutefois, syncdb ne s'exécutera pas.

maintenant ive installé django sur le vps sans le forcer dans un virtualenv, alors je peux exécuter syncdb. mais syncdb échoue lors de l'importation de modules dans les applications installées dans les packages de site mais pas sur les vps. donc je sais que cette déclaration ci-dessus ne fonctionne pas.

J'apprécie qu'il puisse y avoir un endroit plus spécialisé pour poser cette question, je ne sais tout simplement pas. dites-moi ce que c'est si vous savez quelque part où cela obtiendra une réponse. J'ai deux jours pour faire tourner ce vps et pour être honnête, je suis prêt à abandonner.

+0

Avez-vous fait 'source' sur le virtualenv? –

+0

non ce qui est une erreur plutôt noob à faire! – bytejunkie

+0

fait cela, maintenant il ne va pas importer postgresql_psycopg2, alors peut-être que ce n'est pas le correctif. pas sûr de savoir pourquoi il ne va pas importer des modules de paquets de site ... – bytejunkie

Répondre

0

J'ai travaillé pour que debian, apache, django, mod_wsgi et virtualenvs se jouent bien il y a quelques semaines. En regardant le modèle que j'ai fait pour nos fichiers wsgi, j'utilise à la fois 'site.addsitedir' et 'sys.path.append' où 'site.addsitedir' pointe vers le paquetage site et 'sys.path.append' pointe vers une copie de l'application sur l'hôte. Voici ce que la première partie du modèle de jinja2 ressemble pour django.wsgi

import sys 
import os 
import site 

site.addsitedir('{{ site_package }}') 
sys.path.append('{{ local_source }}') 
... 

'local_source' est quelque chose comme '/ home/jdupont/my_project' et 'site_package' est quelque chose comme «/usr/local/lib/python2.6/site-packages '. Je me souviens avoir un peu à jouer avec ça, et je me souviens aussi d'un problème avec 'django.wsgi' et 'settings.py' devant être dans le même répertoire. J'espère que ça aide.

1

Le mélange d'environnements n'aidera pas.

Il est clair que certains paquets sont installés dans le python fourni et d'autres dans virtualenv.

Ma suggestion, bâton pour virtualenv

Et travailler sur le virtualenv, toujours, par source /path/to/venv/bin/activate

Dans le fichier wsgi, activer le virtualenv. Vous le faites non en important ses paquetages site, mais en demandant au mod_wsgi d'utiliser ce python. Vous faites cela par la commande suivante:

activate_this = '/path/to/venv/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 
+0

qui fonctionne bien, merci.une dernière chose que je dois savoir est comment vous exécutez syncdb sur un vps virtualenv'd? im obtenir une erreur à propos de psycopg2 n'étant pas un module valide – bytejunkie

+0

Virtualenv, par défaut, revient aux modules installés dans le paquet python système, sauf si vous l'avez explicitement demandé de ne pas le faire. Donc, psycopyg2 devrait être disponible, s'il y en a dans le paquetage du système. Je suggère de réinstaller le virtualenv de pip. –