目軟著申請(qǐng)全流程:從Tkinter代碼整理到PyInstaller打包實(shí)操)
1. 軟著申請(qǐng)到底在申請(qǐng)什么先把這件事想明白很多人第一次接觸軟件著作權(quán)腦子里冒出來(lái)的第一個(gè)問(wèn)題不是“怎么申請(qǐng)”而是“這東西到底有沒(méi)有用”。我先把結(jié)論放前面軟著在很多時(shí)候不是“有沒(méi)有用”的問(wèn)題而是“你有沒(méi)有”的問(wèn)題。學(xué)生加學(xué)分、評(píng)獎(jiǎng)學(xué)金、保研加分公司申請(qǐng)高新技術(shù)企業(yè)、雙軟認(rèn)證、項(xiàng)目投標(biāo)甚至一些地方的落戶(hù)積分都會(huì)用到它。它不像專(zhuān)利那樣審查周期長(zhǎng)、授權(quán)難度大軟著的本質(zhì)是登記制只要材料規(guī)范、代碼和文檔符合要求下證的概率非常高。但“概率高”不等于“隨便交就能過(guò)”。我見(jiàn)過(guò)太多人卡在幾個(gè)特別基礎(chǔ)的地方源代碼頁(yè)數(shù)不夠、文檔和代碼對(duì)不上、申請(qǐng)表里的軟件名稱(chēng)和代碼里的名稱(chēng)不一致、開(kāi)發(fā)完成日期填得比公司成立日期還早。這些坑不涉及什么高深技術(shù)純粹是沒(méi)把規(guī)則吃透。所以這篇內(nèi)容我會(huì)把整個(gè)流程拆開(kāi)講從材料準(zhǔn)備、代碼整理、文檔撰寫(xiě)到提交、補(bǔ)正、拿證每一步都配上我自己踩過(guò)的坑和實(shí)操技巧。這篇文章適合幾類(lèi)人看一是第一次申請(qǐng)軟著、完全不知道從哪下手的個(gè)人開(kāi)發(fā)者二是需要批量給公司項(xiàng)目申請(qǐng)軟著的研發(fā)或行政人員三是手里有 Python 小工具、Tkinter 桌面程序、PyInstaller 打包的 exe想拿去申請(qǐng)軟著但不確定代碼該怎么整理的人。我會(huì)重點(diǎn)結(jié)合 Python 技術(shù)棧來(lái)講因?yàn)闊嵩~里大量出現(xiàn)了 Tkinter、PyInstaller、Python 這些關(guān)鍵詞而 Python 項(xiàng)目在軟著申請(qǐng)里有一些非常典型的坑比如依賴(lài)庫(kù)代碼算不算、打包后的 exe 能不能作為材料、代碼行數(shù)怎么湊夠等等。先給一個(gè)整體認(rèn)知軟著申請(qǐng)的核心材料就三樣——申請(qǐng)表、源代碼、軟件說(shuō)明書(shū)。申請(qǐng)表在系統(tǒng)里填源代碼和說(shuō)明書(shū)是你要自己整理成 PDF 上傳的。審查員看的重點(diǎn)就兩個(gè)代碼是不是真的、文檔是不是能對(duì)應(yīng)上代碼。把這兩點(diǎn)做好剩下的就是流程問(wèn)題。2. 申請(qǐng)前的準(zhǔn)備工作別急著寫(xiě)代碼先把規(guī)則摸清2.1 軟著材料的硬性規(guī)格先記牢這幾個(gè)數(shù)字軟著對(duì)材料的格式要求非常具體具體到頁(yè)數(shù)、行數(shù)、字體。這些數(shù)字不是建議是硬性門(mén)檻不滿(mǎn)足直接補(bǔ)正甚至不予受理。我整理成一張表你直接對(duì)照著準(zhǔn)備就行。材料項(xiàng)規(guī)格要求常見(jiàn)踩坑點(diǎn)源代碼前 30 頁(yè) 后 30 頁(yè)共 60 頁(yè)總頁(yè)數(shù)不足 60 頁(yè)要全部提交每頁(yè)行數(shù)不少于 50 行空行、注釋太多導(dǎo)致實(shí)際有效行不夠字體字號(hào)通常要求宋體、五號(hào)或小四用等寬字體導(dǎo)致每頁(yè)行數(shù)變化頁(yè)眉需標(biāo)注軟件名稱(chēng)、版本號(hào)、頁(yè)碼名稱(chēng)和申請(qǐng)表不一致軟件說(shuō)明書(shū)一般 10-30 頁(yè)含截圖和功能說(shuō)明截圖太少、功能描述和代碼對(duì)不上申請(qǐng)表系統(tǒng)在線填寫(xiě)開(kāi)發(fā)完成日期、首次發(fā)表日期邏輯矛盾這里重點(diǎn)說(shuō)源代碼。很多人以為“前 30 頁(yè)后 30 頁(yè)”就是隨便截取其實(shí)審查員會(huì)看代碼的連續(xù)性和完整性。如果你交上去的代碼中間有明顯斷裂比如第 30 頁(yè)結(jié)尾是一個(gè)函數(shù)開(kāi)頭第 31 頁(yè)也就是后 30 頁(yè)的第一頁(yè)突然跳到另一個(gè)完全無(wú)關(guān)的模塊這種是容易被質(zhì)疑的。我的做法是如果代碼總量在 3000 行以?xún)?nèi)直接全部提交省去截取的麻煩如果超過(guò) 3000 行就老老實(shí)實(shí)按前 30 頁(yè)后 30 頁(yè)來(lái)并且保證截取位置的代碼邏輯相對(duì)完整。2.2 軟件名稱(chēng)和版本號(hào)的命名講究軟件名稱(chēng)這件事看起來(lái)簡(jiǎn)單實(shí)際上是最容易出問(wèn)題的地方。全稱(chēng)一般格式是“XXX軟件”或“XXX系統(tǒng)”比如“智能五子棋對(duì)戰(zhàn)軟件”“企業(yè)數(shù)據(jù)可視化分析系統(tǒng)”。注意幾點(diǎn)名稱(chēng)里不要出現(xiàn)“最”“第一”“國(guó)家級(jí)”這類(lèi)絕對(duì)化或夸大詞匯不要直接用英文縮寫(xiě)除非是通用術(shù)語(yǔ)版本號(hào)一般寫(xiě) V1.0不要寫(xiě) V1.0.0.1 這種太細(xì)的。我踩過(guò)一次坑申請(qǐng)表里寫(xiě)的是“XX數(shù)據(jù)分析軟件 V1.0”結(jié)果源代碼頁(yè)眉寫(xiě)的是“XX數(shù)據(jù)分析系統(tǒng) V1.0”就這一個(gè)字之差被要求補(bǔ)正。所以從你開(kāi)始整理材料的那一刻起軟件名稱(chēng)和版本號(hào)在所有材料里必須完全一致包括申請(qǐng)表、源代碼頁(yè)眉、說(shuō)明書(shū)封面、說(shuō)明書(shū)頁(yè)眉。建議先在記事本里把標(biāo)準(zhǔn)名稱(chēng)和版本號(hào)寫(xiě)下來(lái)后面所有地方都從這里復(fù)制粘貼不要手打。2.3 開(kāi)發(fā)完成日期和首次發(fā)布日期的邏輯關(guān)系這兩個(gè)日期在申請(qǐng)表里要填邏輯上必須自洽。開(kāi)發(fā)完成日期是你代碼寫(xiě)完的那天首次發(fā)表日期是軟件第一次對(duì)外發(fā)布的那天。如果你沒(méi)有正式發(fā)布過(guò)首次發(fā)表日期可以填“未發(fā)表”。但如果你填了已發(fā)表那首次發(fā)表日期必須晚于或等于開(kāi)發(fā)完成日期而且不能晚于申請(qǐng)日期。我見(jiàn)過(guò)有人開(kāi)發(fā)完成日期填 2024 年 10 月首次發(fā)表日期填 2024 年 8 月這就明顯矛盾了。還有一種情況是公司申請(qǐng)開(kāi)發(fā)完成日期填得比公司營(yíng)業(yè)執(zhí)照上的成立日期還早這也會(huì)被質(zhì)疑。個(gè)人申請(qǐng)相對(duì)寬松但邏輯上也要說(shuō)得通。我的建議是開(kāi)發(fā)完成日期填你代碼最后一次大改完成的那天首次發(fā)表日期如果沒(méi)有就選未發(fā)表省事。3. Python 項(xiàng)目代碼整理實(shí)戰(zhàn)從 Tkinter 到 PyInstaller3.1 Python 代碼怎么整理才符合軟著要求Python 項(xiàng)目申請(qǐng)軟著有一個(gè)天然優(yōu)勢(shì)代碼可讀性好注釋清晰整理起來(lái)相對(duì)容易。但也有一個(gè)天然劣勢(shì)Python 代碼行數(shù)往往不夠。一個(gè)功能完整的 Tkinter 桌面程序可能核心邏輯就幾百行加上界面代碼也就一千多行離 60 頁(yè)按每頁(yè) 50 行算就是 3000 行差得遠(yuǎn)。這時(shí)候怎么辦我的經(jīng)驗(yàn)是不要為了湊行數(shù)去復(fù)制粘貼無(wú)意義的代碼審查員看得出來(lái)。正確的做法是把項(xiàng)目里所有自己寫(xiě)的 Python 文件都納入進(jìn)來(lái)包括主程序、工具模塊、配置文件解析、數(shù)據(jù)處理腳本等。如果你用了 Tkinter 做界面界面代碼本身就是很好的素材因?yàn)?Tkinter 的布局代碼行數(shù)不少而且邏輯清晰。具體整理步驟把項(xiàng)目里所有.py文件列出來(lái)排除第三方庫(kù)和虛擬環(huán)境目錄。按邏輯順序排列入口文件放最前然后是核心功能模塊最后是工具類(lèi)和配置文件。每個(gè)文件開(kāi)頭加上注釋塊寫(xiě)明文件名、功能簡(jiǎn)述、作者、開(kāi)發(fā)完成日期。統(tǒng)一縮進(jìn)和空行風(fēng)格建議用 4 空格縮進(jìn)函數(shù)之間空兩行。導(dǎo)出為 PDF 時(shí)選擇宋體、五號(hào)字確保每頁(yè)不少于 50 行。這里有個(gè)細(xì)節(jié)如果你用了import tkinter as tk這種導(dǎo)入語(yǔ)句這些行也算代碼行沒(méi)問(wèn)題。但如果你把整個(gè)第三方庫(kù)的源碼也貼進(jìn)去那就過(guò)分了。審查員要看的是你自己寫(xiě)的代碼不是庫(kù)的代碼。3.2 Tkinter 界面代碼的整理技巧Tkinter 是 Python 自帶的 GUI 庫(kù)很多小工具、小游戲都用它做界面。熱詞里出現(xiàn)了“五子棋基礎(chǔ)設(shè)置”“tkinter 能否在沒(méi)有 mainloop 主線中打開(kāi)一個(gè)非阻塞的窗口”這些說(shuō)明很多人用 Tkinter 做實(shí)際項(xiàng)目。Tkinter 代碼在軟著申請(qǐng)里其實(shí)是加分項(xiàng)因?yàn)樗苤庇^地對(duì)應(yīng)軟件說(shuō)明書(shū)里的界面截圖。整理 Tkinter 代碼時(shí)我建議按這個(gè)順序組織窗口初始化和基礎(chǔ)設(shè)置Tk()、title()、geometry()控件定義和布局Button、Label、Entry、Canvas等事件綁定和回調(diào)函數(shù)業(yè)務(wù)邏輯函數(shù)主循環(huán)入口mainloop()這樣整理出來(lái)的代碼審查員一看就知道這是一個(gè)完整的 GUI 程序配合說(shuō)明書(shū)里的截圖說(shuō)服力很強(qiáng)。如果你做的是五子棋這類(lèi)游戲棋盤(pán)繪制、落子判斷、勝負(fù)判定這些邏輯代碼都是很好的素材行數(shù)也夠。關(guān)于“tkinter 能否在沒(méi)有 mainloop 主線中打開(kāi)一個(gè)非阻塞的窗口”這個(gè)問(wèn)題從軟著角度來(lái)說(shuō)你只要把實(shí)現(xiàn)這個(gè)功能的代碼整理進(jìn)去就行。實(shí)現(xiàn)方式通常是用update()代替mainloop()或者把 Tkinter 窗口放在單獨(dú)的線程里。這些代碼本身就是你軟件的技術(shù)亮點(diǎn)寫(xiě)進(jìn)說(shuō)明書(shū)里還能增加技術(shù)含量。3.3 PyInstaller 打包后的項(xiàng)目怎么處理PyInstaller 是 Python 項(xiàng)目打包成 exe 的常用工具熱詞里“pyinstaller打包命令”“pyinstaller打包成單個(gè)exe”“pyinstaller打包paddleocr”都指向這個(gè)。這里有一個(gè)非常關(guān)鍵的認(rèn)知軟著申請(qǐng)?zhí)峤坏氖窃创a不是打包后的 exe。PyInstaller 打包出來(lái)的 exe 是二進(jìn)制文件審查員不看這個(gè)也沒(méi)法看。那 PyInstaller 在軟著申請(qǐng)里扮演什么角色兩個(gè)作用一是你的軟件說(shuō)明書(shū)里可以寫(xiě)“本軟件通過(guò) PyInstaller 打包為單文件 exe可在 Windows 環(huán)境下直接運(yùn)行”這屬于軟件的技術(shù)特征描述二是如果你的項(xiàng)目依賴(lài)了 PaddleOCR 這類(lèi)第三方庫(kù)打包配置本身也是你項(xiàng)目的一部分可以在說(shuō)明書(shū)里簡(jiǎn)要說(shuō)明。但源代碼部分你提交的仍然是你自己寫(xiě)的.py文件。PyInstaller 生成的spec文件如果是你自己寫(xiě)的也可以作為代碼的一部分提交因?yàn)樗w現(xiàn)了你的打包配置邏輯。不過(guò)spec文件通常行數(shù)不多象征性放進(jìn)去就行。我個(gè)人的做法是源代碼只提交自己寫(xiě)的 Python 文件PyInstaller 相關(guān)的內(nèi)容放在說(shuō)明書(shū)里作為“運(yùn)行環(huán)境”或“部署方式”來(lái)描述。這樣既符合規(guī)范又能體現(xiàn)項(xiàng)目的完整性。3.4 代碼頁(yè)眉和頁(yè)碼的批量處理60 頁(yè)的源代碼手動(dòng)加頁(yè)眉頁(yè)碼會(huì)瘋掉。我的做法是用 Python 腳本自動(dòng)處理。思路是把所有.py文件合并成一個(gè)文本文件然后按每頁(yè) 50 行分頁(yè)用reportlab或fpdf生成 PDF頁(yè)眉自動(dòng)加上軟件名稱(chēng)和版本號(hào)。如果你不想寫(xiě)腳本也可以用 Word 的“頁(yè)眉頁(yè)腳”功能配合“分頁(yè)符”手動(dòng)做但 60 頁(yè)手動(dòng)操作容易出錯(cuò)。我建議至少用 Python 做一次自動(dòng)化處理因?yàn)檐浿暾?qǐng)可能不止一次公司項(xiàng)目多的話(huà)這套腳本能反復(fù)用。這里給一個(gè)簡(jiǎn)單的思路示例不是完整代碼只是說(shuō)明邏輯# 偽代碼思路 lines [] for py_file in py_files: lines.extend(open(py_file).readlines()) lines.append(\n) # 文件之間加空行分隔 lines_per_page 50 pages [lines[i:ilines_per_page] for i in range(0, len(lines), lines_per_page)] # 生成 PDF每頁(yè)加頁(yè)眉 for page_num, page_lines in enumerate(pages, 1): header f軟件名稱(chēng) V1.0 第 {page_num} 頁(yè) # 寫(xiě)入 PDF...實(shí)際生成 PDF 可以用reportlab中文字體需要注冊(cè)宋體。這個(gè)腳本寫(xiě)一次以后所有項(xiàng)目都能用非常劃算。4. 軟件說(shuō)明書(shū)怎么寫(xiě)才能和代碼對(duì)得上4.1 說(shuō)明書(shū)的基本結(jié)構(gòu)軟件說(shuō)明書(shū)不是技術(shù)文檔不需要寫(xiě)得太深但必須和代碼對(duì)應(yīng)。審查員會(huì)翻你的說(shuō)明書(shū)看里面描述的功能是不是在代碼里能找到。所以說(shuō)明書(shū)的寫(xiě)法是功能描述 界面截圖 操作步驟三件套。標(biāo)準(zhǔn)結(jié)構(gòu)一般是封面軟件名稱(chēng)、版本號(hào)、編寫(xiě)日期目錄軟件概述開(kāi)發(fā)目的、主要功能、運(yùn)行環(huán)境功能說(shuō)明按模塊逐一描述配截圖操作說(shuō)明從啟動(dòng)到退出的完整流程技術(shù)特征簡(jiǎn)要說(shuō)明用了什么技術(shù)棧頁(yè)數(shù)控制在 10 到 30 頁(yè)之間比較合適。太少了顯得單薄太多了審查員也看不過(guò)來(lái)。我一般做到 15 到 20 頁(yè)每個(gè)主要功能配 1 到 2 張截圖。4.2 截圖怎么截才專(zhuān)業(yè)截圖是說(shuō)明書(shū)里最直觀的部分。很多人隨便截幾張圖就交上去結(jié)果截圖里有桌面圖標(biāo)、有其他窗口、有個(gè)人信息顯得很不專(zhuān)業(yè)。我的截圖習(xí)慣是只截軟件窗口本身不要截整個(gè)桌面窗口標(biāo)題欄要完整能看清軟件名稱(chēng)關(guān)鍵操作步驟分多張圖比如“點(diǎn)擊按鈕前”和“點(diǎn)擊按鈕后”截圖分辨率保持一致不要一張大一張小如果界面里有測(cè)試數(shù)據(jù)用“測(cè)試數(shù)據(jù)”“示例數(shù)據(jù)”這種中性詞不要用真實(shí)姓名或敏感信息對(duì)于 Tkinter 程序截圖很方便直接運(yùn)行起來(lái)截窗口就行。如果你做的是五子棋截一張空棋盤(pán)、一張下棋中的、一張勝負(fù)判定的三張圖就能把核心功能說(shuō)清楚。4.3 功能描述和代碼的對(duì)應(yīng)關(guān)系這是說(shuō)明書(shū)的核心。你不能只寫(xiě)“本軟件具有數(shù)據(jù)分析功能”而要寫(xiě)“本軟件的數(shù)據(jù)分析功能由data_analysis.py中的analyze_data()函數(shù)實(shí)現(xiàn)支持 CSV 文件導(dǎo)入、數(shù)據(jù)清洗、統(tǒng)計(jì)計(jì)算和圖表展示”。這樣審查員一看就知道你的代碼和文檔是對(duì)應(yīng)的。我通常會(huì)在說(shuō)明書(shū)里做一個(gè)簡(jiǎn)單的對(duì)應(yīng)表功能模塊對(duì)應(yīng)代碼文件主要函數(shù)用戶(hù)登錄login.pycheck_user()數(shù)據(jù)導(dǎo)入data_import.pyload_csv()圖表展示chart_view.pydraw_chart()這個(gè)表不用放在說(shuō)明書(shū)正文里但你自己心里要有數(shù)寫(xiě)功能描述的時(shí)候按這個(gè)來(lái)。審查員如果較真會(huì)翻代碼找對(duì)應(yīng)你能對(duì)上就沒(méi)問(wèn)題。4.4 運(yùn)行環(huán)境和技術(shù)棧的描述運(yùn)行環(huán)境這部分Python 項(xiàng)目要寫(xiě)清楚 Python 版本、依賴(lài)庫(kù)、操作系統(tǒng)。比如“本軟件基于 Python 3.9 開(kāi)發(fā)使用 Tkinter 作為圖形界面庫(kù)通過(guò) PyInstaller 打包為 Windows 可執(zhí)行文件可在 Windows 10/11 環(huán)境下運(yùn)行”。技術(shù)棧描述不用太詳細(xì)但要點(diǎn)出關(guān)鍵技術(shù)。如果你用了 PaddleOCR 做文字識(shí)別可以寫(xiě)“本軟件集成 PaddleOCR 實(shí)現(xiàn)圖像文字識(shí)別功能”。這屬于技術(shù)特征寫(xiě)進(jìn)去能增加軟件的技術(shù)含量但不要展開(kāi)講原理說(shuō)明書(shū)不是論文。5. 提交申請(qǐng)與補(bǔ)正處理流程和避坑5.1 在線申請(qǐng)系統(tǒng)的填寫(xiě)要點(diǎn)現(xiàn)在軟著申請(qǐng)基本都是在線上系統(tǒng)完成。填寫(xiě)申請(qǐng)表時(shí)有幾個(gè)地方容易出錯(cuò)軟件分類(lèi)根據(jù)你的軟件實(shí)際用途選不確定就選“應(yīng)用軟件”開(kāi)發(fā)方式獨(dú)立開(kāi)發(fā)、合作開(kāi)發(fā)、委托開(kāi)發(fā)個(gè)人申請(qǐng)一般選獨(dú)立開(kāi)發(fā)權(quán)利取得方式原始取得除非你是受讓別人的軟著開(kāi)發(fā)完成日期前面說(shuō)過(guò)了邏輯要自洽首次發(fā)表日期沒(méi)有就選未發(fā)表申請(qǐng)表里還要填軟件的基本功能和技術(shù)特點(diǎn)這部分不用寫(xiě)太長(zhǎng)200 字左右說(shuō)清楚就行。我一般寫(xiě)本軟件是一款基于 Python 和 Tkinter 開(kāi)發(fā)的 XXX 工具主要功能包括 A、B、C解決了 XXX 問(wèn)題具有界面簡(jiǎn)潔、操作便捷的特點(diǎn)。5.2 材料上傳的格式和大小源代碼和說(shuō)明書(shū)一般要求 PDF 格式大小有限制通常單個(gè)文件不超過(guò) 10MB 或 20MB。60 頁(yè)源代碼 PDF 一般不會(huì)超但如果你截圖特別多說(shuō)明書(shū) PDF 可能偏大。壓縮 PDF 可以用在線工具或者 Adobe Acrobat 的“縮小文件大小”功能。上傳前一定要檢查PDF 能不能正常打開(kāi)、頁(yè)眉頁(yè)碼有沒(méi)有、軟件名稱(chēng)版本號(hào)是否一致。我見(jiàn)過(guò)有人上傳的 PDF 是加密的審查員打不開(kāi)直接補(bǔ)正。這種低級(jí)錯(cuò)誤完全可以避免。5.3 補(bǔ)正通知的常見(jiàn)原因和應(yīng)對(duì)補(bǔ)正是軟著申請(qǐng)里很常見(jiàn)的一環(huán)收到補(bǔ)正通知不代表被拒只是材料有問(wèn)題需要改。常見(jiàn)的補(bǔ)正原因我整理了一下補(bǔ)正原因具體表現(xiàn)解決方法代碼頁(yè)數(shù)不足總頁(yè)數(shù)少于 60 頁(yè)且未全部提交補(bǔ)充代碼或全部提交代碼行數(shù)不足每頁(yè)少于 50 行調(diào)整字體或補(bǔ)充代碼名稱(chēng)不一致申請(qǐng)表和代碼頁(yè)眉名稱(chēng)不同統(tǒng)一名稱(chēng)后重新生成日期矛盾開(kāi)發(fā)完成日期晚于首次發(fā)表日期修正日期邏輯說(shuō)明書(shū)與代碼不符說(shuō)明書(shū)功能在代碼中找不到補(bǔ)充對(duì)應(yīng)代碼或修改說(shuō)明書(shū)截圖不清晰截圖模糊、有無(wú)關(guān)內(nèi)容重新截圖收到補(bǔ)正通知后一般有 30 天左右的補(bǔ)正期限在系統(tǒng)里重新上傳修改后的材料就行。補(bǔ)正一次通過(guò)的概率很高不用太緊張。5.4 加急申請(qǐng)和普通申請(qǐng)的選擇軟著申請(qǐng)分普通和加急兩種。普通申請(qǐng)下證周期一般在 30 到 60 個(gè)工作日加急可以縮短到幾個(gè)工作日但需要額外費(fèi)用。如果你是學(xué)生急著加學(xué)分或者公司急著投標(biāo)加急是值得的。如果時(shí)間充裕普通申請(qǐng)就行沒(méi)必要多花錢(qián)。我個(gè)人經(jīng)驗(yàn)是如果距離截止日期還有兩個(gè)月以上走普通如果只剩一個(gè)月走加急。加急的費(fèi)用根據(jù)加急程度不同具體在系統(tǒng)里能看到這里不展開(kāi)。6. 幾個(gè)高頻問(wèn)題的實(shí)操解答6.1 Python 代碼里用了第三方庫(kù)代碼怎么算這是問(wèn)得最多的問(wèn)題。答案很簡(jiǎn)單只提交你自己寫(xiě)的代碼。你import requests或者import tkinter這些導(dǎo)入語(yǔ)句算你的代碼但 requests 和 tkinter 庫(kù)本身的源碼不算。審查員不會(huì)要求你提交第三方庫(kù)的代碼因?yàn)槟遣粚儆谀愕闹鳈?quán)范圍。但如果你修改了第三方庫(kù)的源碼那修改的部分可以算不過(guò)這種情況很少見(jiàn)。正常項(xiàng)目里你寫(xiě)的業(yè)務(wù)邏輯、界面代碼、數(shù)據(jù)處理代碼這些才是軟著保護(hù)的對(duì)象。6.2 代碼行數(shù)不夠 3000 行怎么辦前面提過(guò)如果總行數(shù)不足 60 頁(yè)就全部提交不需要湊。但如果你想讓材料看起來(lái)更充實(shí)可以把項(xiàng)目相關(guān)的配置文件、腳本文件、測(cè)試代碼也納入進(jìn)來(lái)。比如requirements.txt、config.ini、build.spec這些雖然行數(shù)不多但能體現(xiàn)項(xiàng)目的完整性。另外Python 代碼可以通過(guò)合理的空行和注釋來(lái)增加可讀性但不要為了湊行數(shù)加無(wú)意義的注釋。審查員看的是代碼質(zhì)量不是行數(shù)多少。一個(gè) 2000 行的清晰項(xiàng)目比 5000 行的混亂代碼更容易通過(guò)。6.3 軟著和專(zhuān)利的區(qū)別什么時(shí)候選哪個(gè)軟著保護(hù)的是代碼的表達(dá)形式專(zhuān)利保護(hù)的是技術(shù)方案。簡(jiǎn)單說(shuō)軟著是“你寫(xiě)了這個(gè)代碼”專(zhuān)利是“你發(fā)明了這個(gè)方法”。對(duì)于大多數(shù) Python 小工具、Tkinter 桌面程序軟著就夠了申請(qǐng)快、成本低。如果你的軟件里有獨(dú)特的算法或技術(shù)方案可以考慮同時(shí)申請(qǐng)專(zhuān)利但專(zhuān)利審查周期長(zhǎng)、費(fèi)用高一般個(gè)人開(kāi)發(fā)者沒(méi)必要。6.4 軟著下證后的維護(hù)和變更軟著下證后如果軟件升級(jí)了版本比如從 V1.0 升到 V2.0可以申請(qǐng)新版本軟著也可以做版本變更。如果軟件名稱(chēng)改了或者著作權(quán)人變了需要做變更登記。這些操作在系統(tǒng)里都有對(duì)應(yīng)入口按提示提交材料就行。我個(gè)人建議如果只是小版本更新沒(méi)必要重新申請(qǐng)軟著等積累了幾個(gè)大版本再一起申請(qǐng)。軟著的有效期是自然人終生及死后 50 年法人是 50 年不用急著頻繁更新。7. 我踩過(guò)的坑和給你的實(shí)操建議第一個(gè)坑代碼頁(yè)眉的軟件名稱(chēng)和申請(qǐng)表不一致。這個(gè)坑我踩過(guò)兩次第一次是手打名稱(chēng)時(shí)打錯(cuò)了一個(gè)字第二次是版本號(hào)格式不同。后來(lái)我學(xué)乖了所有材料里的名稱(chēng)和版本號(hào)都從一個(gè)文本文件里復(fù)制絕不手打。第二個(gè)坑說(shuō)明書(shū)截圖里有個(gè)人信息。有一次截圖里帶了一個(gè)測(cè)試用的真實(shí)姓名雖然不是什么敏感信息但審查員還是要求補(bǔ)正說(shuō)截圖不清晰。后來(lái)我截圖前都會(huì)把測(cè)試數(shù)據(jù)換成“張三”“李四”這種明顯是示例的數(shù)據(jù)。第三個(gè)坑PyInstaller 打包后的 exe 當(dāng)成代碼提交。這個(gè)錯(cuò)誤很低級(jí)但確實(shí)有人犯。記住軟著提交的是源代碼exe 是二進(jìn)制審查員不看。第四個(gè)坑開(kāi)發(fā)完成日期填得太早。個(gè)人申請(qǐng)雖然沒(méi)有公司成立日期的限制但如果你的開(kāi)發(fā)完成日期填得比 Python 3.0 發(fā)布還早那就明顯不合理了。填日期要符合常識(shí)。最后分享一個(gè)提高效率的技巧建立軟著申請(qǐng)模板庫(kù)。把源代碼 PDF 生成腳本、說(shuō)明書(shū) Word 模板、截圖規(guī)范文檔都整理好下次申請(qǐng)新項(xiàng)目時(shí)直接套用能省掉大量重復(fù)勞動(dòng)。我第一次申請(qǐng)花了整整一周第二次用模板只用了兩天。如果你手里正好有一個(gè) Python Tkinter 的項(xiàng)目不管是五子棋、數(shù)據(jù)分析工具還是爬蟲(chóng)可視化界面現(xiàn)在就可以按上面的流程整理材料了。代碼整理和說(shuō)明書(shū)撰寫(xiě)是最花時(shí)間的部分但也是最可控的部分把這兩塊做好剩下的流程就是按部就班。