Compilez python et distribuez les binaires !
Une idée judicieuse :
Utilisez Cython , Nuitka , Se débarrasser de la peau ou quelque chose de similaire pour compiler python en code C, puis distribuer votre application sous forme de bibliothèques binaires python (pyd).
De cette façon, il ne reste aucun code (octet) Python et vous avez fait tout ce que l'on peut raisonnablement attendre d'un code normal (c'est-à-dire votre employeur), je pense. (.NET ou Java sont moins sûrs que ce cas, car ce bytecode n'est pas obfusqué et peut relativement facilement être décompilé en source raisonnable).
Cython est de plus en plus compatible avec CPython, donc je pense que cela devrait fonctionner. (En fait, j'y pense pour notre produit ). Nous construisons déjà certaines librairies tierces en tant que pyd/dlls, donc expédier notre propre code python en tant que binaires n'est pas une étape trop importante pour nous).
Voir Ce billet de blog (pas par moi) pour un tutoriel sur la façon de le faire. (thx @hithwen)
Une idée folle :
Vous pourriez probablement faire en sorte que Cython stocke les fichiers C séparément pour chaque module, puis les concaténer tous et les construire avec un inlining important. De cette façon, votre module Python est assez monolithique et difficile à découper avec des outils courants.
Plus que fou :
Vous pourriez être en mesure de construire un seul exécutable si vous pouvez lier (et optimiser avec) le runtime python et toutes les bibliothèques (dlls) de manière statique. De cette façon, il sera difficile d'intercepter les appels vers/depuis python et les bibliothèques du framework que vous utilisez. Cela ne peut pas être fait si vous utilisez du code LGPL.
31 votes
Py2exe ne fait que stocker les fichiers de code d'octet .pyc dans une archive .zip, donc ce n'est certainement pas une solution. Néanmoins, cela peut être utile lorsqu'il est combiné avec un script de démarrage approprié pour le faire fonctionner sous Linux.
22 votes
Comme ça : stackoverflow.com/questions/15955948/
5 votes
C'est la réponse la plus complète à votre question : wiki.python.org/moin/Asking%20for%20Help/
3 votes
La seule chose que vous pourriez faire est d'utiliser les licences et un backend distant pour effectuer les opérations. Le code important sera placé dans le backend, donc du point de vue de l'application client, le backend agira comme une boîte noire. Personne ne sait ce qui se cache derrière ces appels réseau, votre code important sera donc protégé. Si la licence expire, les appels réseau ne seront pas authentifiés. C'est la seule solution à laquelle je pense pour que le code important reste caché aux utilisateurs finaux.
2 votes
Vous pouvez toujours ajouter de la valeur en connectant votre logiciel à un serveur, c'est-à-dire des mises à jour,