【问题标题】:Module not found when drag and drop Python file拖放 Python 文件时找不到模块
【发布时间】:2016-05-25 23:41:03
【问题描述】:

我有一个 Python 脚本,用户可以将 KML 文件拖放到该脚本中以方便使用。它将删除的文件作为 sys.arg[1]。当以myScript.py Location.kml 身份输入命令行时,一切正常。但是当我拖放文件时,会抛出一个错误,说no module named xlsxwriter。 xlsxwriter 与我的 Python 脚本位于另一个名为 Packages 的文件夹中。为什么它适用于命令行而不是拖放时?我缺少什么技巧吗?

【问题讨论】:

  • 所以你有一个你的脚本和一个里面有 xlswriter 的目录?
  • @PabloPalácios 是的,主文件夹包含三个项目:脚本、KML 文件和另一个名为 Packages 的文件夹。 xlsxwriter 在包中。
  • 脚本的目录应该是sys.path[0],所以你应该能够导入位于那里的包。 Packages 子目录不应该在sys.path 中,至少默认情况下不应该。可以手动添加:script_dir = os.path.abspath(os.path.dirname(__file__));package_dir = os.path.join(script_dir, 'Packages');sys.path.insert(1, package_dir)
  • @eryksun 谢谢你的工作!这也是因为我使用sys.path.append(os.getcwd()+'/Packages') 设置模块的路径,而它应该使用sys.path.append(os.path.abspath(os.path.dirname(__file__))+'/Packages') 设置
  • 我建议在索引 1 处插入而不是追加。这使您的私有包优先于标准库。

标签: python windows drag-and-drop xlsxwriter


【解决方案1】:

感谢 erkysun 解决了这个问题! eryksun 的解决方案运行良好,我发现了另一个无法运行的原因。这是因为当我将文件拖放到 python 脚本中时,然后运行os.getcwd(),无论文件在哪里,它都会返回C:\WINDOWS\system32。为了在我拥有os.getcwd() 的任何地方抵消这种情况,我将其更改为os.path.abspath(os.path.dirname(__file__)),然后它就起作用了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多