2017-01-28 1 views
0

Py2Exe를 사용하여 스크립트를 컴파일하려고합니다. 이것은 setup.py 파일입니다. 'Autoreply_SOURCE.py'당신이 볼 수 있듯이, 나는 'variables.py'와 EXE 파일로 바뀝니다 파일로 data_files을 넣어 가지고Py2Exe 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, 
      } 
    } 
) 

이것은 variables.py 같이 잘 작동이 실행하고 .exe가 실행되지만 컴파일 된 후에는 값이 고정됩니다. 이것을 극복 할 수있는 방법이 있습니까? 사용자는 주 스크립트를 실행할 수 있어야하지만 variables.py를 변경할 수 있어야합니다.

감사

답변

0

변경하지 않을 수 있도록, 파일 variables.py 컴파일되며 (당신이 library.zip을 열 경우 내부 variables.pyc을 볼 수) 모듈로 ZipFile에 추가됩니다 Autoreply_SOURCE.pyimport variables를 사용하는 경우는 컴파일 후 내용. 당신이 말했듯이, "가치는 얼어 붙습니다."그리고 당신은이 행동을 바꿀 가능성이 없습니다.

대신 수행 할 수있는 작업은 가져 오기 명령문을 바꾸고 모듈을 동적으로 가져 오는 것이고 매우 권장하지는 않습니다. 이 일을하고 수 있도록 사용자를 variables.py을 편집하는 것은 매우 위험 할 수 있으며, 코드가 실행되기 때문에을 권장하지 않는 것이

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

주, 그래서 다른이 문제를 감당할하는 제안 :이 의미 방법. 하나의 쉬운 옵션은 구성 파일 (JSON 형식 또는 기타 형식 일 수 있음)을 만들고 사용자가 편집 할 특정 값만로드하는 것입니다. 예를 들어

:

import json 

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