2009-12-30 5 views
3

Eh bien, je veux utiliser WEb2Py parce que c'est assez agréable .. J'ai juste besoin de changer le répertoire de travail dans le répertoire où tous mes modules/bibliothèques/applications sont donc je peux les utiliser. Je veux pouvoir importer mon vrai programme quand j'utilise l'interface web2py/applications. Je dois faire ceci au lieu de mettre toutes mes applications et d'autres choses dans le dossier Web2Py ... J'essaye de donner à mon programme une interface Web sans mettre le programme dans le dossier de Web2Py ... Désolé si ceci est difficile à comprendre.Web2Py Répertoire de travail

Répondre

0

os.chdir vous permet de modifier le répertoire de travail du système d'exploitation, mais à vos besoins (permettant l'importation d'un tas de modules & c qui sont contraints de vivre dans un endroit étrange), il semble préférable d'ajouter les répertoires nécessaires pour sys.path à la place.

+0

oui ceci est une solution valable. Merci en fait .... – user233864

5

Dans tout programme Python multithread (et pas seulement Python), vous ne devez pas utiliser os.chdir et vous ne devez pas changer sys.path lorsque plusieurs threads sont en cours d'exécution. Ce n'est pas sûr car cela affecte d'autres threads. De plus, vous ne devriez pas sys.path.append() dans une boucle car cela pourrait exploser.

Tous les frameworks Web sont multithread et les requêtes sont exécutées en boucle. Certains frameworks web ne vous permettent pas d'installer/désinstaller des applications sans redémarrer le serveur web et donc si os.chdir/sys.path.append n'est exécuté qu'au démarrage, il n'y a pas de problème.

Dans web2py, nous voulons pouvoir installer/désinstaller des applications sans redémarrer le serveur Web. Nous voulons que les applications soient très dynamiques (par exemple, définir des modèles basés sur les informations fournies avec la requête http). Nous voulons que chaque application ait son propre dossier de modèles et nous voulons une séparation complète entre les applications afin que si deux applications ont besoin de versions différentes du même module, elles ne sont pas en conflit les unes avec les autres, nous fournissons donc des API (request.folder , import_local).

Vous pouvez toujours utiliser le fichier normal os.chdir et sys.path.append mais vous devez le faire en dehors des threads (et ce n'est pas un problème spécifique à web2py). Vous pouvez utiliser l'importation où vous voulez comme vous le feriez pour n'importe quel autre programme Python.

Je suggère fortement de déplacer cette discussion vers la liste de diffusion web2py.

+0

J'ai trouvé web2py flippe sur la modification du répertoire de travail. Dans tout framework web python décent, vous ne devez pas imposer de règles inutiles au développeur et ne pas supposer que le répertoire de travail ne changera pas. Par exemple, tout script que web2py.py exécute en utilisant son script exécutant "feature" (--run) peut potentiellement changer de répertoire. Une solution simple est que le framework web prenne une copie du répertoire de travail au démarrage et l'utilise toujours. –

0

Je devais faire ceci même chose. J'ai quelques modules que je voulais utiliser de mes contrôleurs. Si vous voulez être en mesure d'utiliser le code qui se trouve dans le répertoire des modules dans le contrôleur, vous pouvez utiliser:

# use this in your controller code 
impname = local_import('module_in_modules', reload=True) 
# reload true will ensure that it will re load whenever 
# there are changes to the module 

Jay