Python pyinsatller打包Django项目为exe文件

1. 自行百度安装pyinstaller包。

常用py文件打包
到**.py文件所在的目录,shift+右键-在此处打开pow,注意路径中不要有中文
执行命令:pyinstaller demo.py
在当前的目录下,将会生成两个文件夹:build和dist。dist里面就是所有可执行文件,点击demo.exe就能运行了。
常用用法:
pyinstaller -F demo.py 只在dist中生产一个demo.exe文件。
pyinstaller -D demo.py 默认选项,除了demo.exe外,还会在在dist中生成很多依赖文件,推荐使用。

2. 若项目中有css、js等等。在settings文件中加入以下代码。

STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')

终端运行:

python manage.py collectstatic

在django项目路径下执行python manage.py collectstatic会自动地将STATICFILES_DIRS列出的目录以及各个App下的static子目录的所有文件复制到STATIC_ROOT。

django项目urls中加入:

from django.conf.urls.static import static
from django.conf import settings
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

此处是将STATIC_ROOT目录的静态文件复制一份到网页 STATIC_URL路径下。

3. 进入项目目录,shift+右键,在此处打开PowerShell窗口,输入命令pyinstaller -D manage.py

4. 修改manage.spec:

datas:里边加的是html文件,css、js等等文件。

hiddenimports:后边会说到。

5. 进入项目目录,shift+右键,在此处打开PowerShell窗口,输入命令pyinstaller manage.spec重新打包。

6. 此时项目目录下会生成一个dist的文件夹,进入dist在进入manage文件夹,shift+右键,在此处打开PowerShell窗口,输入mange.exe按tab runserver。

7.不报错则忽略,若报以下错误:

No module named XXX,这是因为Django有些module不会自动收集,需要手动添加。
解决方法:在manage.spec文件中修改hiddenimports=[]为hiddenimports=['users','users.apps','sql_server.pyodbc.compiler', '...', '...']
回到了第4步。
提示缺少什么module就在此处添加什么。(很恶心人的是每次只会提示一个错误,需要一直修改manage.spec文件,然后pyinstaller manage.spec重新打包)

8. 进入dist在进入manage文件夹,shift+右键,在此处打开PowerShell窗口,输入mange.exe按tab runserver。不报错则忽略,若报以下错误:

RuntimeError: Script runserver does not exist.
[7964] Failed to execute script manage
解决方案:运行时加--noreload 开关。
即:manage.exe runserver 8000 --noreload

9. 进入dist在进入manage文件夹,shift+右键,在此处打开PowerShell窗口,输入mange.exe按tab runserver 8000 --noreload。

到此程序基本已经没问题,已经可以正常访问了。

10. 拓展:新建一个run.py文件。

import os


os.system('manage.exe runserver 8000 --noreload')
input()

在run.py文件路径下,shift+右键,在此处打开PowerShell窗口输入pyinstaller -F run.py 打包run.py

注:也可以加入图标run.ico:打包命令为:pyinstaller -F -i run.ico run.py

将dist文件夹下的run.exe文件移到到 manage.exe同一路径下。

下次双击运行run.exe 就能直接运行django项目了。

-------ending--------

原文地址:https://www.cnblogs.com/loren880898/p/14681933.html