NotADirectoryError:[WinError 267]目录名无效:

时间:2018-06-08 17:32:38

标签: python-3.x tkinter

我正在使用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\\'

1 个答案:

答案 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;。通过改变脚本的行为来解决根本问题也可能有所帮助,因此可能不会再尝试这样做了。

祝你好运!