I am trying to run a Django project using an EXE file compiled using Pyinstaller. But when I run the compiled .EXE file using this command I get ModuleNotFoundError: No module named 'app.urls'
and another OsError: [WinError 123]
. I will explain how I setup this stuff later.
Here is the full error when I run the .EXE file:
C:UsersomenDesktopdistdj>dj.exe runserver
Watching for file changes with StatReloader
Performing system checks
Exception in thread django-main-thread:
Traceback (most recent call last):
File "threading.py", line 917, in _bootstrap_inner
File "threading.py", line 865, in run
File "site-packagesdjangoutilsautoreload.py", line 54, in wrapper
File "C:UsersomenDesktopdistdjdjangocoremanagementcommandsrunserver.py", line 117, in inner_run
self.check(display_num_errors=True)
File "site-packagesdjangocoremanagementbase.py", line 390, in check
File "site-packagesdjangocoremanagementbase.py", line 377, in _run_checks
File "site-packagesdjangocorechecksregistry.py", line 72, in run_checks
File "site-packagesdjangocorechecksurls.py", line 40, in check_url_namespaces_unique
File "site-packagesdjangocorechecksurls.py", line 57, in _load_all_namespaces
File "site-packagesdjangoutilsfunctional.py", line 80, in __get__
File "site-packagesdjangourlsresolvers.py", line 584, in url_patterns
File "site-packagesdjangoutilsfunctional.py", line 80, in __get__
File "site-packagesdjangourlsresolvers.py", line 577, in urlconf_module
File "importlib__init__.py", line 127, in import_module
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "C:UsersomenAnaconda3libsite-packagesPyInstallerloaderpyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "djdjurls.py", line 22, in <module>
File "site-packagesdjangourlsconf.py", line 34, in include
File "importlib__init__.py", line 127, in import_module
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'app.urls'
Traceback (most recent call last):
File "djmanage.py", line 24, in <module>
File "djmanage.py", line 20, in main
File "site-packagesdjangocoremanagement__init__.py", line 381, in execute_from_command_line
File "site-packagesdjangocoremanagement__init__.py", line 375, in execute
File "site-packagesdjangocoremanagementbase.py", line 323, in run_from_argv
File "C:UsersomenDesktopdistdjdjangocoremanagementcommandsrunserver.py", line 60, in execute
super().execute(*args, **options)
File "site-packagesdjangocoremanagementbase.py", line 364, in execute
File "C:UsersomenDesktopdistdjdjangocoremanagementcommandsrunserver.py", line 95, in handle
self.run(**options)
File "C:UsersomenDesktopdistdjdjangocoremanagementcommandsrunserver.py", line 102, in run
autoreload.run_with_reloader(self.inner_run, **options)
File "site-packagesdjangoutilsautoreload.py", line 598, in run_with_reloader
File "site-packagesdjangoutilsautoreload.py", line 583, in start_django
File "site-packagesdjangoutilsautoreload.py", line 301, in run
File "site-packagesdjangoutilsautoreload.py", line 307, in run_loop
File "site-packagesdjangoutilsautoreload.py", line 347, in tick
File "site-packagesdjangoutilsautoreload.py", line 363, in snapshot_files
File "site-packagesdjangoutilsautoreload.py", line 262, in watched_files
File "site-packagesdjangoutilsautoreload.py", line 103, in iter_all_python_module_files
File "site-packagesdjangoutilsautoreload.py", line 139, in iter_modules_and_files
File "pathlib.py", line 1339, in exists
File "pathlib.py", line 1161, in stat
OSError: [WinError 123] La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte: '<frozen importlib._bootstrap>'
[11168] Failed to execute script manage
First I installed Pyinstaller
and other dependencies using the commands:
conda install -c conda-forge pyinstaller
conda install django
conda install -c conda-forge gdal
conda install -c anaconda psycopg2
Then I installed OSGeo4W64
on my Windows 10 machine for GDAL
.
I added this in settings.py
:
import os
if os.name == 'nt':
import platform
OSGEO4W = r"C:OSGeo4W"
if '64' in platform.architecture()[0]:
OSGEO4W += "64"
assert os.path.isdir(OSGEO4W), "Directory does not exist: " + OSGEO4W
os.environ['OSGEO4W_ROOT'] = OSGEO4W
os.environ['GDAL_DATA'] = OSGEO4W + r"sharegdal"
os.environ['PROJ_LIB'] = OSGEO4W + r"shareproj"
os.environ['PATH'] = OSGEO4W + r"bin;" + os.environ['PATH']
os.environ['DJANGO_SETTINGS_MODULE'] = 'dj.settings'
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
GEOS_LIBRARY_PATH = r'C:OSGeo4W64bingeos_c.dll'
GDAL_LIBRARY_PATH = r'C:OSGeo4W64bingdal204.dll'
I also generated a spec file using this command:
pyi-makespec dj/manage.py
And this is the generated manage.spec
:
(I added in datas
the templates folder but it didn’t work…)
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['dj\manage.py'],
pathex=['C:\Users\omen\Desktop'],
binaries=[],
datas=[('app/templates','app/templates')],
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='manage',
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='manage')
Then I generated the project using this command:
pyinstaller --name=dj dj/manage.py
Also I edited libgdal.py to have the following:
# Custom library path set?
try:
from django.conf import settings
lib_path = settings.GDAL_LIBRARY_PATH
except (AttributeError, ImportError, ImproperlyConfigured, OSError):
lib_path = None
Here is my main urls.py:
from django.contrib import admin
from django.urls import path
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app.urls')),
]
And here is INSTALLED_APPS:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app'
]
Please help!!!
Advertisement
Answer
I able to fix this problem…
Here is what I have done:
- Generate spec file using
pyi-makespec dj/manage.py
- Add app.urls in hiddenimports such as
hiddenimports=['app.urls',],
- Use this command instead
pyinstaller manage.spec
Finally!!!