cx_Freeze - appdirs 包是必需的

Posted

技术标签:

【中文标题】cx_Freeze - appdirs 包是必需的【英文标题】:cx_Freeze - The appdirs package is required 【发布时间】:2017-02-17 11:32:39 【问题描述】:

我正在尝试将 .py 脚本转换为 .exe

cx_Freeze 成功编译 exe。但是,当我运行 exe 文件时,它会引发此错误:

ImportError: 'appdirs' 包是必需的;通常这与此软件包捆绑在一起,因此如果您收到此警告,请咨询您的发行版的包装商

这是我的 setup.py

from cx_Freeze import setup, Executable

setup(
    name = "dbx_sharelink" ,
    version = "0.1" ,
    description = " " ,
    executables = [Executable("dbx_sharelink.py")]  ,
)

源代码 Python 脚本

import sys
import dropbox
import pandas as pd
import sys
import os

dbx = dropbox.Dropbox('xxxxxxxxxxxxxxxxx')

def getSharedLink(full_path):
    try:
        link = dbx.sharing_create_shared_link(full_path).url
    except dropbox.exceptions.ApiError as err:
        print('*** API error', err)
        return None
    return link


print(sys.argv[1])
link = getSharedLink("/A_DATA/data")

df = pd.DataFrame(['link':link])
df.to_clipboard(index=False,header=False)


os.system("pause")

如何解决这个错误?

【问题讨论】:

你能分享你试图冻结的 Python 脚本吗? 我现在将源代码添加到我的问题中。 【参考方案1】:

我遇到了同样的问题.. 在 setup.py 文件中添加 options 参数,如下所示:

setup (name="MyAPP",
       version="0.1",
       description = "My GUI application!",
       options = 'build_exe': 'packages':packages,
       .
       .
       .)

在packages put下(packages应该在setup之前):

packages = ['pkg_resources._vendor']

(如果你有类似的问题,你可以添加更多包..)

您可以在此处阅读有关选项的更多信息:http://cx-freeze.readthedocs.io/en/latest/distutils.html#build-exe

这为我解决了问题!


【讨论】:

【参考方案2】:

我遇到了同样的问题。 只需将包添加到选项中

additional_mods = ['appdirs', 'packaging.version']
additional_packages = ['scipy', 'numpy', 'appdirs', 'packaging']

options = 
        'build_exe': 
                      'packages': additional_packages,
                      'includes': additional_mods,
        

【讨论】:

【参考方案3】:

尝试升级到 setuptools 34.4.1,这对我有用

【讨论】:

这对我来说不适用于 linux 上的 python 3.6.1,setuptools 不依赖于 appdirs。 cx_freeze 也不会将 appdirs 安装为 pip3 的依赖项。

以上是关于cx_Freeze - appdirs 包是必需的的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:没有名为“appdirs”的模块

AppDir创建缓存目录

ASP.Net 中等信任设置

必需参数 $path 遵循可选参数 $handlers paypal sdk [重复]

cx_Freeze 不工作 - 没有名为 cx_Freeze 的模块

Python cx_Freeze 错误“没有名为 'cx_Freeze.util' 的模块”