Компиляция скрипта Selenium с использованием PyInstaller, получение TypeError: требуется целое число (получено байтов типа) - PullRequest
0 голосов
/ 16 октября 2019

Ниже приведена усеченная версия моего кода, которая отлично работает с помощью Jupyter Notebook. Я смотрю, чтобы он был скомпилирован в .exe, используя Pyinstaller.

import pandas as pd
import numpy as np
from selenium import webdriver
import os, sys
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
import selenium.webdriver.support.expected_conditions as ec


def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)


driver = webdriver.Chrome(r"C:\Users\User\Desktop\Folder\chromedriver.exe")
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("www.google.com")


wait_proxy = input("Press any key to exit...")

Я добавил функцию resource_path, сославшись на некоторые сообщения о переполнении стека, но не уверен, действительно ли это необходимо.

К сожалению, я получаю ошибку, как показано ниже:

PS C:\Users\User\Desktop\Folder> pyinstaller Simple.py
78 INFO: PyInstaller: 3.5
78 INFO: Python: 3.8.0
78 INFO: Platform: Windows-10-10.0.18362-SP0
78 INFO: wrote C:\Users\User\Desktop\Folder\Simple.spec
78 INFO: UPX is not available.
78 INFO: Extending PYTHONPATH with paths
['C:\\Users\\User\\Desktop\\Folder', 'C:\\Users\\User\\Desktop\\Folder']
78 INFO: checking Analysis
93 INFO: checking PYZ
93 INFO: Building PYZ because PYZ-00.toc is non existent
109 INFO: Building PYZ (ZlibArchive) C:\Users\User\Desktop\Folder\build\Simple\PYZ-00.pyz
Traceback (most recent call last):
  File "c:\users\user\appdata\local\programs\python\python38\lib\runpy.py", line 192, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\users\user\appdata\local\programs\python\python38\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\User\AppData\Local\Programs\Python\Python38\Scripts\pyinstaller.exe\__main__.py", line 9, in <module>
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\__main__.py", line 111, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\__main__.py", line 63, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\building\build_main.py", line 844, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\building\build_main.py", line 791, in build
    exec(code, spec_namespace)
  File "C:\Users\User\Desktop\Folder\Simple.spec", line 18, in <module>
    pyz = PYZ(a.pure, a.zipped_data,
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\building\api.py", line 98, in __init__
    self.__postinit__()
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\building\datastruct.py", line 158, in __postinit__
    self.assemble()
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\building\api.py", line 128, in assemble
    self.code_dict = {
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\building\api.py", line 129, in <dictcomp>
    key: strip_paths_in_code(code)
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\building\utils.py", line 652, in strip_paths_in_code
    consts = tuple(
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\building\utils.py", line 653, in <genexpr>
    strip_paths_in_code(const_co, new_filename)
  File "c:\users\user\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\building\utils.py", line 660, in strip_paths_in_code
    return code_func(co.co_argcount, co.co_kwonlyargcount, co.co_nlocals, co.co_stacksize,
TypeError: an integer is required (got type bytes)

Мой файл спецификаций выглядит так:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['Simple.py'],
             pathex=['C:\\Users\\User\\Desktop\\Folder'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='Simple',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='Simple')

Ответы [ 2 ]

1 голос
/ 26 октября 2019

pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz

Прямая установка последней версии может быть совместима с python 3.8

1 голос
/ 25 октября 2019

Если вы используете Python 3.8, попробуйте понизить версию, так как pyinstaller не поддерживает все новые версии Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...