OVH Cloud OVH Cloud

Bytecode et CGI

16 réponses
Avatar
Laurent
Salut !

Je decouvre le monde Python et quelques questions me taraudes :

Est-il possible d'executer un byte-code Python sur un serveur web
(apache) ?

Dans la négative, est-il possible d'executer un byte-code a partir d'un
script Python ?

Enfin, existe-t-il un package similaire à DBI sous Perl ?

Merci d'avance pour vos réponses

A+,
Laurent.

6 réponses

1 2
Avatar
Wilk
Laurent writes:

In article ,
Wilk wrote:

Pourquoi utiliser des logiciels open source dans ce cas ? C'est assez
contradictoire...


Pour ne pas s'appuyer sur une couche logiciel propietaire en evitant
ainsi un sur-cout du produit.

Les projets qui s'appuient sur de l'open source ne sont pas tous
obligatoirement open source.


Dans ton message précédent tu parlais d'entreprises ne voulant pas
investir dans l'open-source. Hors développer un logiciel dessus c'est
déjà s'investir dans l'open-source.




La protection des sources sert surtout à ne pas encourager le
developpement specifique et donc a preserver l'integriter du framework
pour ne pas rendre plus complexe la maintenance.


Tu pourrais détailler ton raisonnement ?


C'est simple : Une entreprise qui achete les sources est libre de les
modifier à sa guise. Si elle n'achete pas les sources, elle n'a pas le
droit de les modifier. Cependant, avec un script "en clair" la tentation
peut etre grande de vouloir faire la modification soit meme, car suivant
les clauses contractuelles, la maintenance peut aussi avoir un cout. Et
bien sur, cette modification ne sera pas repertoriee. Cerise sur le
gateau, en cas de livraison d'une nouvelle version, ces modifications
risquent fort d'etre ecrassees et nous voila face a une regression sans
que personne ne sache pourquoi. Ca peut sembler delirant, mais c'est
encore pire quand ca arrive. Et devine qui est en tort dans ce cas la ?


Dans ce cas il suffit d'avoir un md5 du programme.

Mais comme tu le dis, si le client modifie les sources sans le dire
puisqu'il n'a pas les droits, il va être emmerdé lors de chaque mise à
jour, ce n'est pas dans son intérêt. Donc il renvoi la modification pour
qu'elle soit intégrée et tt le monde y gagne.
Et si il n'installe plus les mises à jour, c'est un client perdu, donc
peu importe qu'il modifie les sources où non.

--
William - http://flibuste.net



Avatar
Laurent
In article ,
Wilk wrote:

Les projets qui s'appuient sur de l'open source ne sont pas tous
obligatoirement open source.


Dans ton message précédent tu parlais d'entreprises ne voulant pas
investir dans l'open-source. Hors développer un logiciel dessus c'est
déjà s'investir dans l'open-source.


Oui. Mais ce n'est pas l'entreprise qui s'en occupe. Elle se contente
d'utiliser un programme pret a l'emploi. Et la base du systeme etant
open source, le cout initial s'en trouve reduit.
Pour mieux te faire comprendre, comparont Oracle et Mysql, IIS et
apache, Coldfusion et PHP, window$ et Linux. Quelle infrastructure
adopter pour reduire les couts d'acquisition et de license ?
Alors pourquoi pas Java ? Avec des composants websphere entreprise ou
sans ?

C'est simple : Une entreprise qui achete les sources est libre de les
modifier à sa guise. Si elle n'achete pas les sources, elle n'a pas le
droit de les modifier. Cependant, avec un script "en clair" la tentation
peut etre grande de vouloir faire la modification soit meme, car suivant
les clauses contractuelles, la maintenance peut aussi avoir un cout. Et
bien sur, cette modification ne sera pas repertoriee. Cerise sur le
gateau, en cas de livraison d'une nouvelle version, ces modifications
risquent fort d'etre ecrassees et nous voila face a une regression sans
que personne ne sache pourquoi. Ca peut sembler delirant, mais c'est
encore pire quand ca arrive. Et devine qui est en tort dans ce cas la ?


Dans ce cas il suffit d'avoir un md5 du programme.
C'est une solution pour controler le "niveau de version". Pas pour

empecher les mauvaises manip.

Mais comme tu le dis, si le client modifie les sources sans le dire
puisqu'il n'a pas les droits, il va être emmerdé lors de chaque mise à
jour, ce n'est pas dans son intérêt. Donc il renvoi la modification pour
qu'elle soit intégrée et tt le monde y gagne.
Et si il n'installe plus les mises à jour, c'est un client perdu, donc
peu importe qu'il modifie les sources où non.
Mieux vaut prevenir que guerrir. Il vaut mieux que la solution vienne de

l'editeur que du client, surtout lorsque tu as plusieurs comptes a
gerer. Car s'il y a souvent des couches "specifiques client" dans
certains projets, il y a toujours des couches de base communes a tout
les clients. Le client n'a pas maitrise d'ouvrage.


Avatar
Christophe M
In article ,
Wilk wrote:


Laurent writes:


Je cherche a empecher l'edition du code et a rendre possible un
deploiement de logiciel en .pyc ou .pyo au niveau web. Bref ! Est-ce que
sur ce point Python est plus ouvert que Java sans etre oblige de sortir
la grosse artillerie.


Python sait lancer directement des pyc ou pyo, et même des modules
(option -m du 2.4). Ton problème ne vient pas de python mais
d'unix/apache, il faut que tu regarde de ce côté, y a plusieurs
solutions...
binfmts du côté linux par ex



Je vais aller voir de ce cote. Car c'est en effet la relation
bytecode/lanceur qui est problematiaue. Si toute fois quelqu'un avait
une parade sous apache...


Au pire, si tu n'y arrive pas, tu peux très bien lancer un cgi classique
qui fasse un import de ton script (qui pourrait être dans un zip en
prime).



Un import de script ne me pose pas de contrainte, mais je prefererais
une option plus "elegante" un peu a la manière du "loadsclass" de java.

Merci.



N'est-ce pas justement le but de l'import ?
Il charge en mémoire le contenu d'un fichier python, lui-même
définissant une ou plusieurs classes ?
Evidemment, au lieu de la "simple" directive import, il y a des méthodes
dans "je ne sais plus quel module" pour faire du chargement dynamique
plus ... "pointus", comme en Java.

Et sinon, en mattante simplement les extensions .pyc comme étant aussi
exécutable en mode cgi, ça devrait fonctionner non ?
Ma ligne de commande "python test.pyc" lance bien mon script "compilé"...
Bien sur, sur site client on ne déploi que les fichiers .pyc
Je sais pas si c'est faisable avec le mod_python...



Avatar
Laurent
In article <41c67d1c$,
Christophe M <mccricri_at_hotmail.com> wrote:


Un import de script ne me pose pas de contrainte, mais je prefererais
une option plus "elegante" un peu a la manière du "loadsclass" de java.

Merci.



N'est-ce pas justement le but de l'import ?
Il charge en mémoire le contenu d'un fichier python, lui-même
définissant une ou plusieurs classes ?
Evidemment, au lieu de la "simple" directive import, il y a des méthodes
dans "je ne sais plus quel module" pour faire du chargement dynamique
plus ... "pointus", comme en Java.


Oui, le seul problème est que le nom du fichier est static (du moins il
me semble). J'ai depuis trouvé mon bonheur avec __import__ qui me permet
de faire des chargements dynamiques.

Tu dois parler de imputil. Je l'ai découvert aussi. Mais je ne me suis
pas penché plus sur ce module pour savoir si il me conviendrait.


Et sinon, en mattante simplement les extensions .pyc comme étant aussi
exécutable en mode cgi, ça devrait fonctionner non ?


Sous Linux c'est un peu plus compliqué. Pour que ca marche, il faudrait
pouvoir attacher l'extension à Python. Mais plutôt que de m'orienter
vers ce type d'installation, je vais mettre en place un CGI controler
avec chargement dynamique des .pyc

Ma ligne de commande "python test.pyc" lance bien mon script "compilé"...
Bien sur, sur site client on ne déploi que les fichiers .pyc
Je sais pas si c'est faisable avec le mod_python...
Je pense qu'avec mod_python je pourrais aussi développer un controler,

mais comme pour le moment j'ai des petits problèmes pour le compiler, on
verra ça plus tard. Et de toute manière, il me faut surtout approfondir
Python.

Merci.

A+,
Laurent.


Avatar
Gilles Lenfant
( Fri, 17 Dec 2004 20:43:34 +0100 ) Laurent :

Je ne sais pas vers ou placer le follow-up alors je reste ici


Le but est de proteger le code ...



Quelles sont, de nos jours, les motivations possible qui justifient la
volonté de "proteger un code source" ?


C'est le code source d'une application CGI spécifique, et non d'une
bibliothèque publique (open source). De plus, le code de scripts CGI
peuvent inclure des mots de passe d'accès à des bases de données.

--
Gilles


On voit bien de nos jours la qualité des programmes open source, ...



Avatar
Gilles Lenfant
In article <41c3e1af$0$10241$,
Gilles Lenfant wrote:



En fait, je cherche a savoir s'il y a moyen de faire executer un .pyc ou
un .pyo plutot que d'executer un .py
Le but est de proteger le code (bien sur, ça n'empechera pas le Revers
Engineering) et d'accelerer le temps de reponse du CGI

A+


Il y a un moyen d'exécuter directement les .pyc ou .pyo, c'est ce que
fait py2exe. En cherchant sur google... Cependant, si tu espères une
amélioration spectaculaire des perfs, tu te fourres le doigt dans l'oeil :)



py2exe ne fonctionne que pour un seul OS (window$). Donc, cette solution
n'est pas recevable pour moi.


C'était uniquement pour signaler qu'il est possible d'exécuter
directement des pyc/pyo. Et que le mode opératoire est identique pour
tous les OS. Je n'ai jamais écrit que py2exe doit être utilisé pour
motoriser des scripts CGI :o)

Arfff... Ca soulagera au moins un peu l'interpreteur, du moins j'espere.


Booof. C'est le chargement et le lancement de l'interpréteur qui
pénalisent les temps de réponse en mode CGI. Les perfs du mode CGI sont
médiocres en grosse charge du fait de sa nature.

En faisant des scripts principaux minimum, et déléguant toute la
mécanique à des scripts importés, on gagne pas mal de temps.



Autrement, pour protéger le code source, les directives de configuration
Apache pour CGI permettent de déclarer certains types comme
"exécutables" coté serveur et empêcher leur téléchargement sur le poste
client.

http://httpd.apache.org/docs/howto/cgi.html


On ne parle pas de la meme chose. Mes CGIs Python s'executent bien et le
code ne peut etre visible cote client web car il est correctement
interprete. Je suis habitue à l'utilisation de CGI ;)


Si le script n'est pas un executable, il sera affiche comme du texte
classique.
Les CGI ne peuvent etre que des executables, que ce soient des scripts
ou bien des binaires. Pour un script CGI (suivant l'OS), c'est la
première ligne du script qui va indiquer quel interpreteur utiliser, ou
alors son extension. Or, les bytecode ne contiennent pas cette ligne et
sous Linux ca pose un probleme.
Sous apache il y a donc deux solutions (a ma connaissance) pour faire
executer Python :

- Utilisation du mod_python : Probleme, on se trouve dans une
configuration type PHP, JSP, ASP ; script embarqué dans une page HTML
avec interpretation cote serveur. Donc, le code est lisible. Sauf si un


Absolument pas, le code est *exécuté* côté serveur, et le serveur - sauf
grosse bourde dans le paramètrage Apache - ne sert jamais le code source
des pages PHP (ASP, JSP, mod_python...) aux visiteurs.

Python peut charger un .pyc ou un .pyo et l'executer. Dans ce cas, la
page peyt faire office de wrapper.

- Le CGI : idem, le code est en claire. Ici, meme chose : faire un
wrapper.

Quand à Zope, si je dis pas de betise, je dirais qu'il est à Python ce
que Tomcat est à Java.


La bétise est dite ;o)
Tomcat est une infrastructure toute nue (ou presque). Zope propose des
services de plus haut niveau que Tomcat (base de données objet,
sécurité, langages de templates, indexation...)

--
Gilles



1 2