<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 導航 - [索引](../genindex.xhtml "總目錄") - [模塊](../py-modindex.xhtml "Python 模塊索引") | - [下一頁](gui.xhtml "圖形用戶界面(GUI)常見問題") | - [上一頁](extending.xhtml "擴展/嵌入常見問題") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) ? - zh\_CN 3.7.3 [文檔](../index.xhtml) ? - [Python 常見問題](index.xhtml) ? - $('.inline-search').show(0); | # [Python在Windows上的常見問題](#id2) 目錄 - [Python在Windows上的常見問題](#python-on-windows-faq) - [我怎樣在Windows下運行一個Python程序?](#how-do-i-run-a-python-program-under-windows) - [我怎么讓 Python 腳本可執行?](#how-do-i-make-python-scripts-executable) - [為什么有時候 Python 程序會啟動緩慢?](#why-does-python-sometimes-take-so-long-to-start) - [我怎樣使用Python腳本制作可執行文件?](#how-do-i-make-an-executable-from-a-python-script) - [`*.pyd` 文件和DLL文件相同嗎?](#is-a-pyd-file-the-same-as-a-dll) - [我怎樣將Python嵌入一個Windows程序?](#how-can-i-embed-python-into-a-windows-application) - [如何讓編輯器不要在我的 Python 源代碼中插入 tab ?](#how-do-i-keep-editors-from-inserting-tabs-into-my-python-source) - [如何在不阻塞的情況下檢查按鍵?](#how-do-i-check-for-a-keypress-without-blocking) ## [我怎樣在Windows下運行一個Python程序?](#id3) 這不一定是一個簡單的問題。如果你已經熟悉在Windows的命令行中運行程序的方法,一切都顯而易見;不然的話,你也許需要額外獲得些許指導。 除非你在使用某種集成開發環境,否則你將會在被稱為“DOS 窗口”或“命令提示符窗口”的地方 *輸入* Windows 命令。 通常你可以在搜索欄搜索 `cmd` 來創建這種窗口。 你應該能夠識別你何時打開了這樣的窗口,因為你將看到一個 Windows“命令提示符”,通常看起來是這樣: ``` C:\> ``` 前面的字母可能會不同,而且后面有可能會有其他東西,所以你也許會看到類似這樣的東西: ``` D:\YourName\Projects\Python> ``` 出現的內容具體取決與你的電腦如何設置和你最近用它做的事。 當你啟動了這樣一個窗口后,就可以開始運行Python程序了。 Python 腳本需要被另外一個叫做 Python *解釋器* 的程序來處理。 解釋器讀取腳本,把它編譯成字節碼,然后執行字節碼來運行你的程序。 所以怎樣安排解釋器來處理你的 Python 腳本呢? 首先,確保命令窗口能夠將“py”識別為指令來開啟解釋器。 如果你打開過一個命令窗口, 嘗試輸入命令 `py` 然后按回車: ``` C:\Users\YourName> py ``` 然后你應當看見類似類似這樣的東西: ``` Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> ``` 解釋器已經以“交互模式”打開。這意味著你可以交互輸入Python語句或表達式,并在等待時執行或評估它們。這是Python最強大的功能之一。輸入幾個表達式并看看結果: ``` >>> print("Hello") Hello >>> "Hello" * 3 'HelloHelloHello' ``` 許多人把交互模式當作方便和高度可編程的計算器。 想結束交互式Python會話時,調用 [`exit()`](../library/constants.xhtml#exit "exit") 函數,或者按住 Ctrl 鍵時輸入 Z ,之后按 Enter 鍵返回Windows命令提示符。 你可能發現在開始菜單有這樣一個條目 開始 ? 所有程序 ? Python 3.x ? Python (命令行), 運行它后會出現一個有著 `>>>` 提示的新窗口。 在此之后,如果調用 [`exit()`](../library/constants.xhtml#exit "exit") 函數或按 Ctrl-Z 組合鍵后窗口將會消失。 Windows 會在這個窗口中運行一個“python”命令,并且在你終止解釋器的時候關閉它。 現在我們知道 `py` 命令已經被識別,可以輸入Python腳本了。 你需要提供Python腳本的絕對路徑或相對路徑。 假設Python腳本位于桌面上并命名為 `hello.py`,并且命令提示符在用戶主目錄打開,那么可以看到類似于這樣的東西: ``` C:\Users\YourName> ``` 那么現在可以讓``py``命令執行你的腳本,只需要輸入``py`` 和腳本路徑: ``` C:\Users\YourName> py Desktop\hello.py hello ``` ## [我怎么讓 Python 腳本可執行?](#id4) 在 Windows 上,標準 Python 安裝程序已將 .py 擴展名與文件類型 (Python.File) 相關聯,并為該文件類型提供運行解釋器的打開命令 (`D:\Program Files\Python\python.exe "%1" %*`) 。 這足以使腳本在命令提示符下作為“foo.py”命令被執行。 如果希望通過簡單地鍵入“foo”而無需輸入文件擴展名來執行腳本,則需要將 .py 添加到 PATHEXT 環境變量中。 ## [為什么有時候 Python 程序會啟動緩慢?](#id5) 通常,Python 在 Windows 上啟動得很快,但偶爾會有錯誤報告說 Python 突然需要很長時間才能啟動。更令人費解的是,在其他配置相同的 Windows 系統上,Python 卻可以工作得很好。 該問題可能是由于計算機上的殺毒軟件配置錯誤造成的。當將病毒掃描配置為監視文件系統中所有讀取行為時,一些殺毒掃描程序會導致兩個數量級的啟動開銷。請檢查你系統安裝的殺毒掃描程序的配置,確保兩臺機它們是同樣的配置。已知的, McAfee 殺毒軟件在將它設置為掃描所有文件系統訪問時,會產生這個問題。 ## [我怎樣使用Python腳本制作可執行文件?](#id6) 請參閱 [cx\_Freeze](https://anthony-tuininga.github.io/cx_Freeze/) \[https://anthony-tuininga.github.io/cx\_Freeze/\] 了解 distutils 擴展,它允許你從 Python 代碼創建控制臺和 GUI 可執行文件。 [py2exe](http://www.py2exe.org/) \[http://www.py2exe.org/\] ,是構建基于 Python 2.x 的可執行文件的最流行擴展,它還不支持 Python 3 ,但這個版本正在開發。 ## [`*.pyd` 文件和DLL文件相同嗎?](#id7) 是的, .pyd 文件也是 dll ,但有一些差異。如果你有一個名為 `foo.pyd` 的DLL,那么它必須有一個函數 `PyInit_foo()` 。 然后你可以編寫 Python 代碼 “import foo” ,Python 將搜索 foo.pyd (以及 foo.py 、 foo.pyc )。如果找到它,將嘗試調用 `PyInit_foo()` 來初始化它。你不應將 .exe 與 foo.lib 鏈接,因為這會導致 Windows 要求存在 DLL 。 請注意, foo.pyd 的搜索路徑是 PYTHONPATH ,與 Windows 用于搜索 foo.dll 的路徑不同。此外, foo.pyd 不需要存在來運行你的程序,而如果你將程序與 dll 鏈接,則需要 dll 。 當然,如果你想 `import foo` ,則需要 foo.pyd 。在 DLL 中,鏈接在源代碼中用 `__declspec(dllexport)` 聲明。 在 .pyd 中,鏈接在可用函數列表中定義。 ## [我怎樣將Python嵌入一個Windows程序?](#id8) 在 Windows 應用程序中嵌入 Python 解釋器可以總結如下: 1. 請 \_不要\_ 直接在你的 .exe 文件中內置 Python 。在 Windows 上, Python 必須是一個 DLL ,這樣才可以處理導入的本身就是 DLL 的模塊。(這是第一個未記錄的關鍵事實。)相反,鏈接到 `pythonNN.dll` ;它通常安裝在 `C:\Windows\System` 中。 *NN* 是 Python 版本,如數字“33”代表 Python 3.3 。 你可以通過兩種不同的方式鏈接到 Python 。加載時鏈接意味著鏈接到 `pythonNN.lib` ,而運行時鏈接意味著鏈接 `pythonNN.dll` 。(一般說明: `python NN.lib` 是所謂的“import lib”,對應于 `pythonNN.dll` 。它只定義了鏈接器的符號。) 運行時鏈接極大地簡化了鏈接選項,一切都在運行時發生。你的代碼必須使用 Windows 的 `LoadLibraryEx()` 程序加載 `pythonNN.dll` 。代碼還必須使用使用 Windows 的 `GetProcAddress()` 例程獲得的指針訪問 `pythonNN.dll` 中程序和數據(即 Python 的 C API )。宏可以使這些指針對任何調用 Python C API 中的例程的 C 代碼都是透明的。 Borland 提示:首先使用 Coff2Omf.exe 將 `pythonNN.lib` 轉換為 OMF 格式。 2. 如果你使用 SWIG ,很容易創建一個 Python “擴展模塊”,它將使應用程序的數據和方法可供 Python 使用。SWIG將為你處理所有蹩腳的細節。結果是你將鏈接到 .exe 文件 *中* 的C代碼 (!) 你不必創建 DLL 文件,這也簡化了鏈接。 3. SWIG 將創建一個 init 函數(一個 C 函數),其名稱取決于擴展模塊的名稱。例如,如果模塊的名稱是 leo ,則 init 函數將被稱為 initleo() 。 如果您使用 SWIG 陰影類,則 init 函數將被稱為 initleoc() 。這初始化了一個由陰影類使用的隱藏輔助類。 你可以將步驟 2 中的 C 代碼鏈接到 .exe 文件的原因是調用初始化函數等同于將模塊導入 Python ! (這是第二個關鍵的未記載事實。) 4. 簡而言之,你可以用以下代碼使用擴展模塊初始化 Python 解釋器。 ``` #include "python.h" ... Py_Initialize(); // Initialize Python. initmyAppc(); // Initialize (import) the helper class. PyRun_SimpleString("import myApp"); // Import the shadow class. ``` 5. Python C API 存在兩個問題,如果你使用除 MSVC 之外的編譯器用于構建 python.dll ,這將會變得明顯。 問題1:采用 FILE\* 參數的所謂“極高級”函數在多編譯器環境中不起作用,因為每個編譯器的FILE結構體概念都不同。從實現的角度來看,這些是非常 \_低\_ 級的功能。 問題2:在為void函數生成包裝器時,SWIG會生成以下代碼: ``` Py_INCREF(Py_None); _resultobj = Py_None; return _resultobj; ``` Py\_None 是一個宏,它擴展為對 pythonNN.dll 中名為 \_Py\_NoneStruct 的復雜數據結構的引用。同樣,此代碼將在多編譯器環境中失敗。將此類代碼替換為: ``` return Py_BuildValue(""); ``` 有可能使用 SWIG 的 `%typemap` 命令自動進行更改,但我無法使其工作(我是一個完全的SWIG新手)。 6. 使用 Python shell 腳本從 Windows 應用程序內部建立 Python 解釋器窗口并不是一個好主意;生成的窗口將獨立于應用程序的窗口系統。相反,你(或 wxPythonWindow 類)應該創建一個“本機”解釋器窗口。將該窗口連接到Python解釋器很容易。你可以將 Python的 i/o 重定向到支持讀寫的 \_任意\_ 對象,因此你只需要一個包含 read() 和 write() 方法的 Python 對象(在擴展模塊中定義)。 ## [如何讓編輯器不要在我的 Python 源代碼中插入 tab ?](#id9) 本 FAQ 不建議使用制表符, Python 樣式指南 [**PEP 8**](https://www.python.org/dev/peps/pep-0008) \[https://www.python.org/dev/peps/pep-0008\] ,為發行的 Python 代碼推薦 4 個空格;這也是 Emacs python-mode 默認值。 在任何編輯器下,混合制表符和空格都是一個壞主意。 MSVC 在這方面沒有什么不同,并且很容易配置為使用空格: 點擊 Tools ? Options ? Tabs,對于文件類型“Default”,設置“Tab size”和“Indent size”為 4 ,并選擇“插入空格”單選按鈕。 如果混合制表符和空格導致前導空格出現問題, Python 會引發 [`IndentationError`](../library/exceptions.xhtml#IndentationError "IndentationError") 或 [`TabError`](../library/exceptions.xhtml#TabError "TabError") 。你還可以運行 [`tabnanny`](../library/tabnanny.xhtml#module-tabnanny "tabnanny: Tool for detecting white space related problems in Python source files in a directory tree.") 模塊以批處理模式檢查目錄樹。 ## [如何在不阻塞的情況下檢查按鍵?](#id10) 使用 msvcrt 模塊。 是標準的 Windows 特定擴展模塊。它定義了一個函數 `kbhit()` 來檢查是否存在鍵盤命中,而 `getch()` 來獲取一個字符而不回顯它。 ### 導航 - [索引](../genindex.xhtml "總目錄") - [模塊](../py-modindex.xhtml "Python 模塊索引") | - [下一頁](gui.xhtml "圖形用戶界面(GUI)常見問題") | - [上一頁](extending.xhtml "擴展/嵌入常見問題") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) ? - zh\_CN 3.7.3 [文檔](../index.xhtml) ? - [Python 常見問題](index.xhtml) ? - $('.inline-search').show(0); | ? [版權所有](../copyright.xhtml) 2001-2019, Python Software Foundation. Python 軟件基金會是一個非盈利組織。 [請捐助。](https://www.python.org/psf/donations/) 最后更新于 5月 21, 2019. [發現了問題](../bugs.xhtml)? 使用[Sphinx](http://sphinx.pocoo.org/)1.8.4 創建。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看