<p>例如,使用JSON,而不是使用python脚本本身作为数据存储的手段</p>
<p>这里有一些你可以玩的示范</p>
<pre><code>import json
from pprint import pprint
relative_loc = "./file_data.json"
def write():
# create some data to save
some_list = [i for i in range(3)]
some_dict = {i: n for i, n in enumerate(range(0, 6, 2))}
some_name = [i * 2 for i in 'abcd']
to_file = {"list": some_list,
"dict": some_dict,
"name": some_name}
# saving to json
with open(relative_loc, 'w') as f:
json.dump(to_file, f, indent=2)
def read():
# reading json
with open(relative_loc, 'r') as f:
file = json.load(f)
# Do something to file - just printing for this demo.
pprint(file)
write()
read()
</code></pre>
<p>文件输出:</p>
<pre><code>{
"list": [
0,
1,
2
],
"dict": {
"0": 0,
"1": 2,
"2": 4
},
"name": [
"aa",
"bb",
"cc",
"dd"
]
}
</code></pre>
<p>读取结果:</p>
<pre><code>{'dict': {'0': 0, '1': 2, '2': 4},
'list': [0, 1, 2],
'name': ['aa', 'bb', 'cc', 'dd']}
Process finished with exit code 0
</code></pre>
<hr/>
<p>要添加,如果您计划使用带有<code> onefile</code>标志的PyInstaller,则在执行时会得到一个<strong>打包的<strong>exe,该exe将解压缩到临时目录</p>
<p>这使得工作目录变成临时目录。如果是这样的话,所有的相对路径都将被打断</p>
<p>这是问题的实际原因,即在<code>userInformation.py</code>上所做的更改没有反映出来-因为每次运行onefile exe时,都会在临时目录下解压其中的<code>userInformation.py</code></p>
<p>如果要使用onefile选项,则需要如下更改工作目录:</p>
<pre><code>def IsFrozen():
"""
Checks whether Python instance is Frozen(aka onefile) or not.
Change directory if needed.
"""
if getattr(sys, "frozen", False):
return
file_dir = os.path.dirname(sys.argv[0])
try:
os.chdir(file_dir)
except OSError: # Fail-safe
pass
</code></pre>
<p>通过这种方式,您的脚本将找到放置在<em>exe</em>文件中的文件,但<strong>不会找到总是在所谓的<a href="https://books.google.co.kr/books?id=kYZHCgAAQBAJ&pg=PA688&lpg=PA688&dq=python%20importtime%20runtime&source=bl&ots=isDgYxATOk&sig=ACfU3U3vwLCjT14N4MOeL6WTQ6Q-wjYLgA&hl=ko&sa=X&ved=2ahUKEwiziqHE57PqAhUaK6YKHVM6DhsQ6AEwAHoECAoQAQ#v=onepage&q=python%20importtime%20runtime&f=false" rel="nofollow noreferrer">"import time"</a>上导入的模块</p>