2017-04-20 84 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版本甚至可能會刪除指定腳本的選項。

相關問題