2017-01-28 1 views
0

J'essaye de compiler mon script en utilisant Py2Exe. C'est le fichier setup.py. Comme vous pouvez le voir, je les ai mis data_files comme « variables.py » et le fichier qui se transforme en un exe est « Autoreply_SOURCE.py »Py2Exe fichier variables.py

import py2exe 
import certifi 
print ("Location", certifi.where()) 
from distutils.core import setup 

Mydata_files = ['cacert.pem', 'variables.py'] 

setup(
    console=['Autoreply_SOURCE.py'], 
    data_files= Mydata_files, 
    options={ 
      "py2exe":{ 
        "packages": ["tweepy", "json", "winsound",], 
        "bundle_files": 1, 
        "compressed": True, 
      } 
    } 
) 

Cela fonctionne bien, comme dans le variables.py est exécuté et le fichier .exe est exécuté mais ses valeurs sont figées après sa compilation. Y a-t-il un moyen de surmonter cela? Un utilisateur devrait être capable d'exécuter le script principal mais capable de changer variables.py.

grâce

Répondre

0

Si vous utilisez import variables dans Autoreply_SOURCE.py le fichier variables.py sera compilé et sera ajouté à la zipfile en tant que module (si vous ouvrez library.zip vous verrez variables.pyc à l'intérieur), de sorte que vous ne pouvez pas changer son contenu après la compilation. Comme vous l'avez dit, "les valeurs sont gelées", et vous n'avez aucune possibilité de changer ce comportement. Ce que vous pouvez faire à la place est de remplacer l'instruction d'importation et d'importer le module dynamiquement d'une manière très hackish et non recommandée. Je veux dire ceci:

# import variables (delete or comment this line) 
with open('variables.py') as module: 
    exec(module.read()) 

Notez que faire et permettant à l'utilisateur de modifier variables.py pourrait être très risqué et non recommandé parce que le code sera exécuté, donc je vous suggère de permettre à ce problème dans un autre façon. Une option facile est de créer un fichier de configuration (il peut être au format JSON ou autre) et de ne charger que les valeurs spécifiques que vous voulez que l'utilisateur édite.

Par exemple:

import json 

with open('config.json') as config_file: 
    user_data = json.load(config_file)