2016-05-10 29 views
1

我寫了一個使用PyQT4和plot.ly庫的圖形程序。 我已經試過使用py2exe打包該程序,並且編譯了所有內容,但是當程序到達plot.ly庫正在使用的位置時,會發生錯誤。使用plot.ly與py2exe

File "Efficio.py", line 154, in generateGraph 
File "plotly\offline\offline.pyc", line 283, in plot 
File "plotly\offline\offline.pyc", line 47, in get_plotlyjs 
File "pkg_resources\__init__.pyc", line 1173, in resource_string 
File "pkg_resources\__init__.pyc", line 1605, in get_resource_string 
File "pkg_resources\__init__.pyc", line 1683, in _get 
IOError: [Errno 0] Error: 'plotly\\offline\\plotly.min.js' 

這裏是我的進口:

import sys 
from PyQt4 import QtGui 
import plotly 
import plotly.graph_objs as go 
import webbrowser 

我的安裝文件:

from distutils.core import setup 
import py2exe 
setup(windows=['Efficio.py'], 
    options = { 
     'py2exe' : { 
      'packages' : ['plotly'], 
      'dll_excludes' : ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"], 
      'includes' : ["sip", "requests", "six", "pytz"] 
      } 
     } 
) 

我做了什麼錯?

回答

1

的問題是,不被包含在由py2exe創建Library.zip文件plotly.min.js文件。

我還沒有找到一種方法,以優雅的方式(即:使用setup.py文件中的data_files參數)在Library.zip中包含plotly.min.js文件。

但是! ......有一個骯髒的黑客攻擊。這只是一個黑客;如果其他人有更優雅的解決方案,請發帖。

您可以將一個例程附加到setup.py文件的末尾,該文件手動將plotly.min.js文件添加到Library.zip。

這裏是我的setup.py文件的一個版本:

import sys 
import py2exe 
import matplotlib 
import zipfile 
import shutil 
from distutils.core import setup 

#INITIALISE PATH VARIABLES 
path_lib = 'c:\\path\\to\\library' 
path_temp = 'c:\\temp\\extract' 
path_js = 'C:\\path\\to\\plotly.min.js' 

#EXTEND RECURSION LIMIT 
sys.setrecursionlimit(10000) 

#SETUP 
setup(name='myfile.py', 
     version='1.0.0', 
     description='program description', 
     author='73dev', 
     author_email='', 
     console=['myfile.py'], 
     data_files=matplotlib.get_py2exe_datafiles(), 
     options= 
     { 
     'py2exe' : 
      { 
      'packages' : ['sqlalchemy.dialects.sqlite', 'plotly'], 
      'includes' : ['plotly', 'requests', 'six', 'pytz'], 
      } 
     }) 


''' -- ADD PLOTLY.MIN.JS TO THE LIBRARY ZIP-- '''  

#USER NOTIFICATION 
print '\nadding plotly.min.js to Library.zip ...' 

#EXTRACT LIBRARY.ZIP TO TEMP DIRECTORY 
with zipfile.ZipFile(path_lib + '.zip', 'r') as z: z.extractall(path_temp) 

#ADD PLOTLY.MIN.JS TO EXTRACT 
shutil.copyfile(path_js, path_temp + '\\plotly\\offline\\plotly.min.js') 

#REZIP FILE 
shutil.make_archive(path_lib, 'zip', path_temp) 

#KILL TEMP FILE 
shutil.rmtree(path_temp, ignore_errors=True) 

#USER NOTIFICATION 
print 'processing complete.' 

Here是一個半相關的補丁(僅使用Cx_Freeze選項參數)。

+0

作爲一種替代方法,您可以通過在py2exe選項中使用** skip_archive = True **將所有Library.zip歸檔放在一起。然後,只需將需要包含的文件添加到data_files列表中即可。 – S3DEV

+0

下面是一個例子: – S3DEV

+0

'setup(options = {'py2exe':{'skip_archive':True}})'' – S3DEV