2014-10-20 82 views
1

我試圖在從six.moves.urllib_parse導入urlparse的程序上使用py2exe。下面是程序:py2exe無法從six.py導入

# hello.py 
from six.moves.urllib_parse import urlparse 
print('hello world') 

這裏是我的setup.py:

from distutils.core import setup 
import py2exe 
setup(console=['hello.py']) 

運行hello.py工作正常。當我使用python setup.py py2exe將hello.py編譯成exe文件時,會生成hello.exe文件。然而,當我運行hello.exe我得到一個錯誤說:

ImportError: No module named urlparse

我使用Python 2.7。

在Python 3.4中,運行python setup.py py2exe時出現錯誤KeyError: 'six.moves'

如何阻止這些錯誤的發生?

+0

我會嘗試向py2exe'packages'選項添加'six' – Werner 2014-10-20 12:49:33

+0

@Werner錯誤提示:「TypeError:six不是一個包」 – 2014-10-21 22:50:00

+0

由於py2exe爲特定的python版本創建了一個exe文件,我決定替換我所有的六個實例。這樣做爲我解決了這個錯誤。 (但是,然後我碰到其他進口錯誤) – 2014-10-22 23:40:21

回答

0

py2exe最近發佈了一個新版本修復了這個問題:

Changes in version 0.9.2.2: 
- Added support for six, cffi, pycparser, openssl. 

使用這個版本我是能夠創建一個.exe併成功運行。

1

問題是,py2exe沒有檢測到通過六個代理模塊,所以他們沒有捆綁。

所有你需要做的就是添加模塊有問題(裏urlparse)你包括你的setup.py:

options={ 
     "py2exe": { 
     ... 
     "includes": ["urlparse"], 
     ... 

這樣的模塊將被打包,並在六次嘗試將其導入,它會工作。