2012-07-23 49 views
1

我想通过自己使用Zed A.Shaw的书学习Python。 在exercise 46。我应该创建一个项目框架(即创建一个setup.py文件,创建模块,等等)。然后制作一个项目。Python:如何在setup.py中包含脚本的exe文件

我必须在我的系统可运行的bin目录中放置一个脚本。我编写了简单的Hello World!脚本,使用cxfreeze将其转换为.exe文件。

然而,当我尝试安装我的setup.py文件(即通过在cmd中输入python setup.py install),我不能安装这个.exe文件,而不是我只能安装脚本script.py 如何安装这个exe文件。 这是我的setup.py文件:

try: 
    from setuptools import setup 
except ImportError: 
    from distutils.core import setup 

config = { 
    'description': 'First project',#ex46 
    'author': 'author',# 
    'url': '',#N/A 
    'download_url': '',#N/A 
    "author_email": "[email protected]" 
    'versio': '3.1', 
    'install_requires': ['nose'], 
    'packages': ['skeleton\quiz46','skeleton\\tests'], 
    'scripts': ['skeleton\\bin\helloscript.py','skeleton\\bin\helloscript.exe'], 
    'name': 'quiz46' 
} 

但是这给了我以下错误:

UnicodeDecodeError 

我也试图把骨架\ BIN \ helloscript.exe但是这给了我一个类似的错误!

我的操作系统是Windows 7,我使用Python 3.1。

再次,我想要的是setup.py安装我的.exe文件,不只是它的脚本。

+1

当显示错误时,包括您得到的整个回溯,这有助于诊断问题。另外,您似乎编辑了setup.py以删除标识信息?错误可能在数据中。 – 2012-07-23 00:23:33

回答

4

我不认为script选项是为了处理除了文本文件以外的任何东西。如果你看看distribute (aka setuptools)的源代码,write_script命令将尝试encode('ascii')的内容,如果它不是一个Python脚本,而且如果你使用的是Python 3.你的cxfreeze exe是一个二进制文件,而不是文本文件,并有可能造成这种窒息。

的更容易的选择,以获得setuptools包括在安装过程中可执行的脚本是使用entry_points选项在setup.py而非scripts

entry_points={'console_scripts':['helloscript = helloscript:main'] } 

console_script将自动换行原来的helloscript.py脚本创建一个exe(在Windows上)并将其安装到您的Python的Script目录中。不需要使用像cxfreeze这样的东西。

+0

现在我知道它为什么不起作用! – user1544624 2012-07-23 15:37:59

+0

但我试着把entry_points放在我的setup.py文件中。我把它放在配置文件中。而且一旦在配置之外,但它仍然给我同样的结果。我想我错了! – user1544624 2012-07-23 16:10:31

+1

听起来像你仍在尝试使用你的'cxfreeze'二进制文件。你需要从你的'setup.py'中删除引用。 'entry_points'' console_scripts'是为了指向原始python脚本中的可调用对象。阅读关于setuptools entry_points(http://packages.python.org/distribute/setuptools.html?highlight=console_script#automatic-script-creation)的文档来弄清楚。这正是Zed希望你做的。 :-) – 2012-07-23 16:35:33

相关问题