2017-04-20 2 views
1

Ich schrieb ein kleines Python-Programm in 3.6, um eine Aufgabe zu automatisieren, die ich monatlich bei der Arbeit mache. Es könnte für andere Leute nützlich sein, mit denen ich arbeite, also habe ich versucht, es mit Pynsist zu bündeln.Selenium ModuleNotFoundError laufendes installiertes Programm gebündelt mit Pynsist

Vor dem Bündeln wird das Programm sowohl von IDLE als auch von der Windows-Befehlszeile erfolgreich ausgeführt. Nach der Bündelung und Installation über die .exe, erhalte ich eine Fehlermeldung,:

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'

Selen nicht das erste Modul, das in meinem Code importiert wird, so scheint es, die andere richtig gebündelt werden, und das Problem ist nur mit Selen.

Ich habe versucht, einige Selen-Dateien in einem Ordner pynsist_pkgs, aber das funktioniert auch nicht. Hier sind diese Dateien, nicht sicher, ob sie die richtigen sind.

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 

Hier Referenz meine installer.cfg Datei:

[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 

Wenn jemand eine Idee hat, wäre das sehr zu schätzen!

+0

Wenn du es mit Pynsist erstellst, solltest du einen Ordner 'build/nsis' bekommen. Siehst du dort nach, ob 'pkgs/selen/__ init __. Py' existiert? –

+0

@ThomasK Es existiert, und es existiert auch im App-Ordner Programme nach der Installation. –

+0

Ah, ich weiß. Sie verwenden die 'script =' Option in der Datei installer.cfg. Im Allgemeinen empfehle ich dringend die Verwendung der 'entry_point =' Option anstelle von Skript - damit geben Sie ihm eine Funktion zum Aufruf, um Ihre Anwendung zu starten. Siehe [die Dokumente] (http://pynsist.readthedocs.io/en/latest/cfgfile.html). Wenn Sie 'script =' verwenden, benötigen Sie am oberen Rand des Skripts einen Textbaustein, der auch in der Dokumentation enthalten ist. –

Antwort

1

Umschreiben als eine Antwort, so ist es für andere Leute klar, die auf diese stoßen.

Die Datei installer.cfg verwendet script=, um zu definieren, wie die Anwendung gestartet wird. Es wird empfohlen, entry_point= zu verwenden, anstatt eine Funktion angeben, wie:

entry_point=my_module:main 

The documentation weitere Informationen hat, was dies tut.

Wenn Sie ein Skript zu verwenden, benötigen, stellen Sie sicher, dass es einige vorformulierten an der Spitze hat, bevor er versucht, Pakete zu importieren:

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

entry_point= verwenden, können Pynsist automatisch diese vorformulierten hinzufügen und mehr (zB besser abgefangene Exceptions in GUI-Apps). Deshalb würde ich das immer über script= empfehlen. Eine zukünftige Version von Pynsist kann sogar die Option zum Angeben eines Skripts entfernen.

Verwandte Themen