我遇到这个问题,我们将python项目编译成带有py2exe的exe,并且除非以管理员身份执行,否则生成的exe不起作用。
我想问这是否应该发生?因为有很多应用程序,我们可以运行而不是管理员,所以有任何方法可以将我的python代码转换为这样的应用程序......
非常感谢..
答案 0 :(得分:4)
听起来您的应用程序正在尝试写入基本用户无权访问的目录;很可能是“Program Files”目录。我相信Vista / Win7是不允许的,标准惯例是写入用户的appdata文件夹,以查找您可能希望存储的任何用户数据。
您可以使用ctypes
模块可靠地获取此目录的位置,这是一个示例:
import ctypes
from ctypes import wintypes
def get_appdata_directory():
CSIDL_APPDATA = 0x001a
dll = ctypes.windll.shell32
app_data_directory = ctypes.create_unicode_buffer(wintypes.MAX_PATH)
found = dll.SHGetFolderPathW(0, CSIDL_APPDATA, 0, 0, app_data_directory)
# FYI: if `found` is False, then it failed to locate the appdata directory
# and app_data_directory.value is empty. So you might want to add some
# code here to verify that a valid path is going to be returned.
# This would probably only happen on older versions of windows,
# but, this is just a guess as I don't have any older OSs available
# for testing. (see my note below)
return app_data_directory.value
appdata = get_appdata_directory()
print(appdata)
# outputs something such as: 'C:\Users\bob\AppData'
注意:我相信WinXP / Win2k引入了appdata
文件夹。不确定WinME和之前,但是,我不相信你必须担心这些早期操作系统的管理员限制。如果你真的想要支持它们,你可以使用python的内置platform
模块和一些条件,然后只需将用户数据写入Windows的古老版本的“Program Files”目录。
答案 1 :(得分:0)
我遇到了让py2exe工作的严重问题。幸运的是,我发现了优秀的PyInstaller不仅可以工作,而且还可以创建更小的可执行文件。我没有遇到你用PyInstaller提到的问题所以我建议尝试一下。