2016-11-26 1 views
3

Donc, j'ai essayé de faire un Standalone EXE depuis très longtemps. Maintenant que j'ai installé Python 32 bits, j'ai essayé py2exe, d'utiliser son option bundle_files pour faire un exe pour mon projet comic-dl. Depuis comic-dl est quelque peu basé comme youtube-dl (même le nom friggin '), donc après que je ne pouvais pas obtenir mon propre fichier setup.p pour fonctionner correctement, j'ai copié youtube-dls' setup.py file puis je l'ai modifié pour faire ça marche pour mon projet.Regrouper un exe autonome

Here is my modification. Et puis je lance ces commandes:

python setup.py install python setup.py py2exe

Tout va bien et je reçois un comic-dl.exe (~ 6 Mo). Mais, quand je l'exécute, je reçois cette erreur:

Traceback (most recent call last): 

    File "comic-dl.py", line 4, in <module> 

    File "zipextimporter.pyo", line 82, in load_module 

    File "honcho.pyo", line 12, in <module> 

    File "zipextimporter.pyo", line 82, in load_module 

    File "sites\mangafox.pyo", line 13, in <module> 

    File "zipextimporter.pyo", line 82, in load_module 

    File "selenium\webdriver\__init__.pyo", line 18, in <module> 

    File "zipextimporter.pyo", line 82, in load_module 

    File "selenium\webdriver\firefox\webdriver.pyo", line 39, in <module> 

    File "zipextimporter.pyo", line 82, in load_module 

    File "selenium\webdriver\remote\webdriver.pyo", line 25, in <module> 

    File "zipextimporter.pyo", line 82, in load_module 

    File "selenium\webdriver\remote\webelement.pyo", line 40, in <module> 

    File "pkgutil.pyo", line 591, in get_data 

IOError: [Errno 2] No such file or directory: 'selenium\\webdriver\\remote\\getAttribute.js' 

j'ai vérifié le fichier getAttribute.js dans le dossier de sélénium et le fichier est là. J'ai même copié le dossier de sélénium dans le projet lui-même, toujours pas de changement.

Ensuite, j'ai essayé this et cela n'a pas de sens car tout n'est pas inclus dans l'option 3 et l'option 2 m'a paru identique quand j'ai changé l'option et exécuté les commandes d'installation. Que peut-on faire pour obtenir un exe autonome dans ce cas?

+0

Au lieu d'utiliser le py2exe complexe, utilisez simple magasin 1 arrêt appelé nuitka. Il peut construire exe et exécutable Linux pour vous avec une commande. En outre, il peut être regroupé sans que personne ne sache que c'est en fait python. (Pas besoin de sfx) – ProgramFast

+0

Je l'ai essayé sans succès. Vous avez quelque chose que je peux utiliser? – Xonshiz

+0

Cx_freeze est un bon projet. C'est juste que vous devez emballer un répertoire si vous voulez le rendre portable. Une recherche rapide peut vous donner des tonnes de tutoriels sur la façon de l'utiliser – ProgramFast

Répondre

4

J'ai aussi ce problème. Voici la façon dont je l'ai résolu:

  1. Aller C:\Python27\selenium\webdriver\remote\ [Répertoire peut être différent si le sélénium est installé dans d'autres répertoires. L'essence est de trouver les fichiers]. Il y a getAttribute.js et IsDisplayed.js fichiers. Copiez-les. Dans votre dossier de distribution dist, vous trouverez un fichier library.zip. Décompressez-le ou ouvrez-le dans la visionneuse par défaut de Windows.
  2. Allez à selenium\webdriver\remote\ et collez les fichiers copiés à l'étape 1.
  3. Si vous décompressez le library.zip, compressez-le et remplacez l'original.

Cela fonctionne avec moi. J'espère que cela pourrait vous aider.

+0

Cela a fonctionné parfaitement pour moi. Merci une tonne –

+0

Vous êtes mon héros monsieur <3 cela a fonctionné comme un charme. –

0

Il semble que vous deviez définir l'exécutable dans le chemin relatif pour qu'il atteigne l'emplacement du fichier codé en dur.

Sinon, je vous recommande d'utiliser PyInstaller, qui dans le meilleur des cas n'a pas besoin de configuration et peut vous obtenir un exécutable de travail tout de suite en une seule commande.

+2

J'ai déjà essayé Pyinstaller. Mais, pour une raison quelconque, pyinstaller n'inclut pas mes modules et donc l'exe ne semble pas fonctionner. – Xonshiz

0

Voici ma solution. L'espoir peut vous aider!

étape 1: modifier le fichier webelement.py

# customized code to resolve resources's path problem when executing py2exe executables 
import sys 
frozen = getattr(sys, 'frozen', '') 
if not frozen: 
    getAttribute_js = pkgutil.get_data(__package__, 'getAttribute.js').decode('utf8') 
    isDisplayed_js = pkgutil.get_data(__package__, 'isDisplayed.js').decode('utf8') 
else: 
    approot = os.path.dirname(sys.executable) 
    getAttribute_js = open(os.path.join(approot, 'getAttribute.js'), 'rb').read().decode('utf8') 
    isDisplayed_js = open(os.path.join(approot, 'isDisplayed.js'), 'rb').read().decode('utf8') 

Note: Dans mon environnement, ce fichier se trouve dans C: \ Python27 \ Lib \ site-packages \ sélénium \ WebDriver \ distance.

étape 2: Dans votre fichier setup.py pour py2exe, incluez le fichier nécessaire dans votre fichier de données. par exemple.

data_files = [(r'.', glob(r'C:\Python27\Lib\site-packages\selenium\webdriver\remote\getAttribute.js')), 
    (r'.', glob(r'C:\Python27\Lib\site-packages\selenium\webdriver\remote\isDisplayed.js'))] 

Ensuite, vous devriez faire fonctionner votre exe. J'ai testé cela dans Windows 7, système 32 bits. python 2.7, avec du sélénium 3.0.2.

0

a marché pour moi

  • C: \ Python27 \ sélénium \ WebDriver \ remote \ Il y a getAttribute.js et les fichiers IsDisplayed.js. Copiez-les. Collez-les dans le répertoire \ distenium \ webdriver \ remote PAS dans le fichier zip.
    • run .exe
    • profit