Pyinstaller 打包 django 項目如何將命令行參數加入?

起因

Pyinstaller 打包 django 項目,打包成 manage.exe 后用命令行 cmd
manage.exe runserver 0.0.0.0:8001 --noreload 來運行感覺很不方便。

希望能夠直接把命令行參數也打包進去,直接運行 exe 。我走了些彎路,但最終實現了。

彎路

我看到有人說 新建一個 main.py 在里面用 os.system :

import osos.system('manage.exe runserver 0.0.0.0:8001 --noreload')

看起來可行,在 manage.py 外包裹一層,但我嘗試以后失敗了,打包出的是一個這樣的結果:
錯誤的結果
運行無反應。沒去深究為啥失敗,畢竟對于打包我也不是太熟悉。

一種可行辦法

接下來是我自己的辦法。
其實也很簡單,找到 main 函數,修改參數列表。

我的 Django 的 manage.py

def main():os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'src.settings')try:from django.core.management import execute_from_command_lineexcept ImportError as exc:raise ImportError("Couldn't import Django. Are you sure it's installed and ""available on your PYTHONPATH environment variable? Did you ""forget to activate a virtual environment?") from excexecute_from_command_line(sys.argv)if __name__ == '__main__':main()

注意這句:

 execute_from_command_line(sys.argv)

從函數名也能知道,這是一個實現從命令行執行的函數,傳入的正是 命令行參數列表 sys.argv
我們只要修改 sys.argv,就可以固定參數列表了。

但這里是有個小坑在的,如果是初學者可能會犯錯。

sys.argv 是參數列表,不是字符串,所以不可以直接把 ‘runserver 0.0.0.0:8001 --noreload’ 這串字符 append 進來,而要一個個來。

所以上面代碼可以改為:

        ) from excprint(sys.argv)sys.argv.append('runserver')sys.argv.append('0.0.0.0:8001')sys.argv.append('--noreload')print('增加參數后:')for a in sys.argv:print(a, end=' ')execute_from_command_line(sys.argv)

當然,寫成列表再 append 上也行的。

    argv = ['runserver', '0.0.0.0:8001', '--noreload']sys.argv.append(argv)

然后 pyinstaller -w -F manage.py 就會生成 manage.exe 了。

不過打包成 exe ,后續可能還會遇到其它問題,比如運行起來后,資源找不到的問題,需要一一解決,manage.spec 我只能提醒一下。

我覺得 Django 似乎沒必要打包成 exe 。。。它用作網站欸,用 dos 界面運行就行了。

第二種辦法

如果不一定要生成 exe,只需要方便運行,其實 寫個 bat 腳本可能更方便一些。代碼都不用動。
直接加一個 bat 腳本運行 manage.py ,然后發送腳本快捷方式到桌面。

xxx.bat 腳本參考:

@echo offREM 這里加了一個臨時環境變量
set sslpath=D:\xxx\anaconda3-2020\Library\bin
set path=%sslpath%;%path%REM 此處用全局路徑會更合適,避免python升級影響。
python manage.py runserver 0.0.0.0:8001pause

這樣還會有個黑黑的 dos 界面,可能會被人不小關閉了。可以再寫個 vbs 調用剛才的 bat 腳本,隱藏 dos 界面:

set shell=wscript.createObject("wscript.shell")
run=shell.Run("xxx.bat, 0)

這樣的話,你想要看到進程,就只能再后臺看到一個 python 進程了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40566.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40566.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40566.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis之刪除策略

文章目錄 前言一、過期數據二、數據刪除策略2.1定時刪除2.2惰性刪除2.3 定期刪除2.4 刪除策略比對 三、逐出算法3.1影響數據逐出的相關配置 總結 前言 Redis的常用刪除策略 一、過期數據 Redis是一種內存級數據庫,所有數據均存放在內存中,內存中的數據可…

web基礎入門和PHP語言基礎入門 一

web基礎入門和php語言基礎入門 一 WEB簡介與HTTP入門WEB簡介HTTP 簡介HTTP 請求報文:請求方法:請求頭部:(常見的請求頭)HTTP 響應報文:響應狀態碼:Cookie HTML入門學習什么是HTML什么是標記語言…

【深入了解pytorch】PyTorch擴展:如何使用PyTorch的擴展功能

【深入了解pytorch】PyTorch擴展:如何使用PyTorch的擴展功能 PyTorch擴展:展示如何使用PyTorch的擴展功能1. 自定義損失函數2. 自定義數據加載器3. 自定義優化器總結PyTorch擴展:展示如何使用PyTorch的擴展功能 PyTorch作為一個開源的深度學習框架,在研究和應用領域廣受歡…

PHP入門基礎教程 - 專欄導讀

🏆作者簡介,黑夜開發者,全棧領域新星創作者?,CSDN博客專家,阿里云社區專家博主,2023年6月CSDN上海賽道top4。 🏆數年電商行業從業經驗,歷任核心研發工程師,項目技術負責…

【LeetCode 算法】Find And Replace in String 字符串中的查找與替換-線性模擬

文章目錄 Find And Replace in String 字符串中的查找與替換問題描述:分析代碼線性模擬 Tag Find And Replace in String 字符串中的查找與替換 問題描述: 你會得到一個字符串 s (索引從 0 開始),你必須對它執行 k 個替換操作。替換操作以三…

Floyd算法

正如我們所知道的,Floyd算法用于求最短路徑。Floyd算法可以說是Warshall算法的擴展,三個for循環就可以解決問題,所以它的時間復雜度為O(n^3)。 Floyd算法的基本思想如下:從任意節點A到任意節點B的最短路徑不外乎2種可能&#xff…

openGauss學習筆記-42 openGauss 高級數據管理-觸發器

文章目錄 openGauss學習筆記-42 openGauss 高級數據管理-觸發器42.1 語法格式42.2 參數說明42.3 示例 openGauss學習筆記-42 openGauss 高級數據管理-觸發器 觸發器會在指定的數據庫事件發生時自動執行函數。 42.1 語法格式 創建觸發器 CREATE TRIGGER trigger_name { BEFORE…

Swagger-ui在idea中的使用

1.添加依賴 <!--添加swagger2相關概念--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--添加swagger-ui相關功能--><de…

Linux學習之基本指令一

在學習Linux下的基本指令之前首先大家要知道Linux下一切皆目錄&#xff0c;我們的操作基本上也都是對目錄的操作&#xff0c;這里我們可以聯想我們是如何在windows上是如何操作的&#xff0c;只是形式上不同&#xff0c;類比學習更容易理解。 目錄 01.ls指令 02. pwd命令 0…

SpringBoot登錄、退出、獲取用戶信息的session處理

1、登錄方法&#xff1a;login PostMapping("/user/login")public ResponseVo<User> login(Valid RequestBody UserLoginForm userLoginForm,HttpSession session) {ResponseVo<User> userResponseVo userService.login(userLoginForm.getUsername(), …

sql A表(含有部分B表字段) 向B表插入A表數據

今天遇到一個數據庫插入問題 向表中插入 生產狀態 為 2 的數據 但生產狀態為改為12 的所有數據 查看網上的評論 參考 insert into b (a,b,c) select ‘1’,‘2’,c from a where a1 這樣就可以a,b字段是插入指定某個值,而C字段則用表a的c字段. 最后解決了。忽然想起原來也有這…

實現Python對.json文件內容的讀取和寫入

要實現Python對.json文件內容的讀取和寫入&#xff0c;可以使用json庫。 首先&#xff0c;需要安裝json庫&#xff1a; pip install json 然后&#xff0c;可以編寫以下代碼來實現對.json文件內容的讀取和寫入&#xff1a; import json# 讀取json文件 with open(data.json, …

PS實現多個圖片轉化GIF動畫

PS實現多個圖片轉化為GIF動畫步驟 一、導入圖片素材1.打開PS軟件&#xff0c;點擊 [文件] --- [腳本] ---[將文件載入堆棧]2.選擇圖片3.導入成功 二、打開時間軸1.點擊[窗口]---[時間軸]2.選擇創建幀動畫3.創建幀動畫 三、創建動畫1.復制幀。2.設置幀的內容。3.修改圖片停留的時…

分布式應用:Zabbix監控Tomcat

目錄 一、理論 1.Zabbix監控Tomcat 二、實驗 1.Zabbix監控Tomcat 三、問題 1.獲取軟件包失敗 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客戶端日志報錯 一、理論 1.Zabbix監控Tomcat &#xff08;1&#xff09;環境 zabbix服務端&#xff1a;192.168.204.214 …

推薦 4 個 yyds 的 GitHub 項目

本期推薦開源項目目錄&#xff1a; 1. 開源的 Markdown 編輯器 2. MetaGPT 3. SuperAGI 4. 一個舒適的筆記平臺 01 開源的 Markdown 編輯器 Cherry 是騰訊開源的 Markdown 編輯器&#xff0c;基于 Javascript具有輕量簡潔、易于擴展等特點&#xff0c; 它可以運行在瀏覽器或服…

UVM學習知識點

這里是引用 include 和 import pkg區別 1.作用 include與C語言中類似&#xff0c;用于在一個文件中插入另一個文件&#xff1b;import用于在一個作用域中引入一個package&#xff08;或其中的內容&#xff09;&#xff0c;使得這些內容在當前作用域中可以不添加其所在的packag…

常用游戲運營指標DAU、LTV及參考范圍

文章目錄 前言運營指標指標范圍參考值留存指標的意義總結 前言 作為游戲人免不了聽到 DAU 、UP值、留存 等名詞&#xff0c;并且有些名詞聽起來還很像&#xff0c;特別是一款上線的游戲&#xff0c;這些游戲運營指標是衡量游戲業務績效和用戶參與度的重要數據&#xff0c;想做…

Tesseract用OpenCV進行文本檢測

我沒有混日子&#xff0c;只是辛苦的時候沒人看到罷了 一、什么是Tesseract Tesseract是一個開源的OCR&#xff08;Optical Character Recognition&#xff09;引擎&#xff0c;OCR是一種技術&#xff0c;它可以識別和解析圖像中的文本內容&#xff0c;使計算機能夠理解并處理…

Maven之mirrorof范圍

mirrorOf 是 central 還是 * 的問題 在配置阿里對官方中央倉庫的鏡像服務器時&#xff0c;我們使用到了 <mirror> 元素。 <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共倉庫</name><url>…

vmalert集成釘釘告警

vmalert通過在alert.rules中配置告警規則實現告警&#xff0c;告警規則語法與Prometheus兼容&#xff0c;依賴Alertmanager與prometheus-webhook-dingtalk實現釘釘告警&#xff0c;以下步驟&#xff1a; 1、構建vmalert 從源代碼構建vmalert&#xff1a; git clone https://…