2017-04-20 57 views
1

我在3.6中编写了一个小型python程序来自动执行我每月在工作中执行的任务。它可能对我工作的其他人有用,所以我一直试图将它与Pynsist捆绑在一起。Selenium ModuleNotFoundError运行已安装程序与Pynsist捆绑在一起

打包之前,程序从IDLE和Windows命令行都成功运行。通过.exe文件捆绑并安装完毕后,我收到一个错误,指出:

Traceback (most recent call last): File "C:\Program Files\Time Clocker\timeClocker.py", line 7, in from selenium import webdriver ModuleNotFoundError: No module named 'selenium'

硒是不是被我的代码导入的第一个模块,这样看来其他人都被正确捆绑和问题仅仅是与硒。

我试过在pynsist_pkgs文件夹中包含一些硒文件,但这也不起作用。这里是那些文件,不知道它们是否合适。

04/04/2017 02:25 PM   19,057 CHANGES 
03/08/2017 07:00 AM    915 MANIFEST.in 
04/04/2017 02:28 PM    7,864 PKG-INFO 
04/04/2017 08:11 AM    5,719 README.rst 
04/13/2017 04:50 PM <DIR>   selenium 
04/13/2017 04:50 PM <DIR>   selenium.egg-info 
04/04/2017 02:28 PM    230 setup.cfg 
04/04/2017 02:26 PM    3,806 setup.py 
       6 File(s)   37,591 bytes 

这里是我的参考文件installer.cfg:

[Application] 
name=Time Clocker 
version=1.0 
package: 
script=timeClocker.py 
console=true  

[Python]  

version=3.6.1  

[Include]  

packages = selenium 
    re 
    getpass  

files = chromedriver.exe 

如果任何人有任何想法,将不胜感激!

+0

当你用Pynsist构建它时,你应该得到一个'build/nsis'文件夹。看看那里,你能看到'pkgs/selenium/__ init __。py'是否存在? –

+0

@ThomasK它确实存在,安装后它也存在于Program Files应用程序文件夹中。 –

+0

啊,我知道。您正在使用installer.cfg中的'script ='选项。通常,我强烈建议使用'entry_point ='选项而不是脚本 - 为此,您可以给它一个函数来调用以启动您的应用程序。请参阅[文档](http://pynsist.readthedocs.io/en/latest/cfgfile.html)。如果你使用'script =',你需要在脚本的顶部有一些样板文件 - 这也在文档中。 –

回答

1

重新发布是一个答案,所以对于遇到此问题的其他人很清楚。

installer.cfg文件使用script=来定义如何启动应用程序。我们推荐使用entry_point=,而不是指定的功能,如:

entry_point=my_module:main 

The documentation有什么这样做的更多信息。

如果你需要使用一个脚本,确保它的顶部有一些样板它试图导入包前:

import sys 
sys.path.insert(0, 'pkgs') 

使用entry_point=允许Pynsist自动添加这个样板和更多(例如以更好地处理GUI应用程序中未捕获的异常)。这就是为什么我总是建议通过script=。未来的Pynsist版本甚至可能会删除指定脚本的选项。