Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

An error for generating an exe file using pyinstaller - typeerror: expected str, bytes or os.PathLike object, not NoneType

I am trying to build an .exe file from .py file using pysinstaller and Python 3.7.2.

It worked with Python 3.6; then I re-installed the last version of Python (3.7.2) and tried to generate an exe file, but pyinstaller barfs.

Below is the error report I get.

(venv) C:\Users\user\Desktop\untitled1>pyinstaller test.py

53 INFO: PyInstaller: 3.4
53 INFO: Python: 3.7.2
54 INFO: Platform: Windows-10-10.0.17134-SP0
58 INFO: wrote C:\Users\user\Desktop\untitled1\test.spec
60 INFO: UPX is not available.
61 INFO: Extending PYTHONPATH with paths
['C:\\Users\\user\\Desktop\\untitled1', 'C:\\Users\\user\\Desktop\\untitled1']
61 INFO: checking Analysis
187 INFO: checking PYZ
236 INFO: checking PKG
237 INFO: Building PKG because PKG-00.toc is non existent
238 INFO: Building PKG (CArchive) PKG-00.pkg

Traceback (most recent call last):
  File "C:\Users\user\Desktop\untitled1\venv\Scripts\pyinstaller-script.py", line 11, in  <module>
    load_entry_point('PyInstaller==3.4', 'console_scripts', 'pyinstaller')()
  File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\__main__.py", line 111, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "C:\Users\user\Desktop\untitled1\venv\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\Desktop\untitled1\venv\lib\site- packages\PyInstaller\building\build_main.py", line 838, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))   
  File "C:\Users\user\Desktop\untitled1\venv\lib\site- packages\PyInstaller\building\build_main.py", line 784, in build
    exec(text, spec_namespace)
  File "<string>", line 29, in <module>   
  File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\building\api.py", line 424, in __init__
    strip_binaries=self.strip, upx_binaries=self.upx,   
  File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\building\api.py", line 196, in __init__
    self.__postinit__()
  File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\building\datastruct.py", line 158, in __postinit__
    self.assemble()   
  File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\building\api.py", line 273, in assemble
    pylib_name = os.path.basename(bindepend.get_python_library_path())   
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\ntpath.py", line 214, in basename
    return split(p)[1]
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\ntpath.py", line 183, in split
    p = os.fspath(p) TypeError: expected str, bytes or os.PathLike object, not NoneType

What could be the problem?

like image 438
김남호 Avatar asked Jan 11 '19 00:01

김남호


People also ask

How do you fix TypeError expected str bytes or OS PathLike object not Bytesio?

The Python "TypeError: expected str, bytes or os. PathLike object, not TextIOWrapper" occurs when we pass a file object instead of a string when opening a file. To solve the error, pass the filename (as a string) to the open() function.

How do you fix TypeError expected str bytes or OS PathLike object not a NoneType?

The Python "TypeError: expected str, bytes or os. PathLike object, not NoneType" occurs when we try to open a file but provide a None value for the filename. To solve the error, figure out where the None value comes from and correct the assignment.


3 Answers

In my case the problem occurs when I'm using the standard library's venv, but not when I'm using virtualenv. (However I had to use virtualenv==16.1.0 because of another bug.)

like image 186
Antonis Christofides Avatar answered Oct 08 '22 04:10

Antonis Christofides


I found the following solution: replace bindepend.py from <myProject_path>\venv\Lib\site-packages\PyInstaller\depend with the file provided by Loran425 on github here

like image 18
Victor Stanescu Avatar answered Oct 08 '22 06:10

Victor Stanescu


As I have read from many forums here and here and discussions regarding this issue caused by Pyinstaller. If you are using Pycharm or any virtual environment. Unfortunatelly Pycharm creates its local vertual environment in venvpath once you indicate the interpreter. So, you should set the external tool (pyinstaller) to the real path of your python 3.7 .exe as the picture shows here. enter image description here

For Linux users, follow my other answer here.

like image 2
Sam Al-Ghammari Avatar answered Oct 08 '22 04:10

Sam Al-Ghammari