我正在使用python来调用一些电力系统仿真软件(CYME)。 我创建了一个.py文件来运行模拟,然后我尝试使用py2exe创建一个.exe文件。运行.py文件时没有任何错误,输出正确。
但是在创建.exe文件并尝试运行它后,我得到以下输出。
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1538, in __call__
return self.func(*args)
File "GUI.py", line 236, in run_scenarios
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Users\anil.chelladurai\Desktop\06_07\ADHCAT_version2D_Demo.py", line 17, in <module>
import cympy
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
File "C:\Program Files (x86)\CYME\CYME\cympy\__init__.py", line 17, in <module>
os.chdir(cyme_dir)
NotADirectoryError: [WinError 267] The directory name is invalid: strong text'C:\\Users\\anil.chelladurai\\Desktop\\06_07\\dist\\library.zip\\'
答案 0 :(得分:0)
&#34;冻结的importlib ......&#34;错误更可能是由使用不受支持的python版本引起的。我怀疑转换器正在使用另一个python环境。
如果你让你的转换器打印它的python版本(不导入tkinter或cympy),你应该得到一个与正确运行脚本的版本不同的版本。支持的版本是3.4,如果您尝试使用其他版本,则会出现问题。这是因为从一个版本到另一个版本,python在引擎盖下是不一样的。即使是次要版本也可能会破坏某些东西。
以下脚本虽然可能看起来很简单,但应该足以提供足够的信息来解决这个问题:
<强>的Python 强>
public class ProjectActivityFinancialReportViewModel
{
private ProjectActivityLocationViewModel _projectActivityLocationVM;
private ProjectActivityViewModel _projectActivityVM;
[Display(Name = "Region")]
public string Region
{
get
{
if (this._projeFaaliyetKonumVM == null)
return string.Empty;
else
return this._projectActivityLocationVM.RegionName;
}
}
[Display(Name = "City")]
public string City
{
get
{
if (this._projectActivityLocationVM == null)
return string.Empty;
else
return this._projectActivityLocationVM.CityName;
}
}
[Display(Name = "Field Name")]
public string FieldName
{
get
{
if (this._projectActivityLocationVM == null || this._projectActivityLocationVM.LocationVm != null)
return string.Empty;
else
return this._projectActivityLocationVM.LocationVm.Name;
}
}
[Display(Name = "Project Activity Name")]
public string ProjectActivityName
{
get
{
if (this._projectActivityVM == null)
return string.Empty;
else
return this._projectActivityVM.ActivityVM.Name;
}
}
[Display(Name = "Project Name")]
public string ProjectName
{
get
{
if (this._projectActivityVM == null)
return string.Empty;
else
return this._projectActivityVM.ProjectVM.Name;
}
}
public int ProjectActivityId
{
get
{
if (this._projectActivityVM == null || this._projectActivityVM.Id == null)
return int.MinValue;
else
{
int id = this._projectActivityVM.Id ?? int.MinValue;
return id;
}
}
}
public TenderViewModel TenderVM
{
get
{
if (this._projectActivityVM == null)
return null;
else
return this._projectActivityVM.TenderVM;
}
}
public ProjeFaaliyetMaliRaporveProjeFaaliyetViewModel()
{
this._projectActivityLocationVM = null;
this._projectActivityVM = null;
}
}
在两个环境中运行该脚本并比较输出。一旦确定正在使用正确的python版本,您可能需要测试Cyme版本以及测试cympy的import sys
print(sys.version)
。
<强>的Python 强>
import
从那时起,一切都应该正常工作。如果没有,这意味着你在自己的python代码中遇到了更深层次的问题。
但是,您可能希望将python脚本转换为可执行文件,这很奇怪。从可执行文件执行python指令的正确方法是连接python C Api。否则,python解释器非常适合运行python脚本,应该是首选。如果转换是为了隐藏python代码或防止复制,这可能不是最好的方法,因为有一些简单的工具可以揭示下面的python脚本。为什么不想将python用于python脚本?
随后的错误,正如评论已经指出的那样,可能是一个很好的例子,“不要做那个&#34;。通过改变脚本的行为来解决根本问题也可能有所帮助,因此可能不会再尝试这样做了。
祝你好运!