簡體   English   中英

Python venv 模塊未找到

[英]Python venv module not found

我正在嘗試在我的棒上創建一個便攜式 venv 以將其復制粘貼給某人,因此他不需要在 PC 上安裝 python 即可運行我的 python 腳本。 我嘗試在這里搜索解決方案,但可能是因為我是 python 和環境的新手,我找不到正確的答案。

我從我的文件夾(Python)中的網站安裝了 Python 版本 3.9.1,並用它創建了一個環境:

Python\pyver\py391\python -m venv pyenv

運行where in venv 顯示:

(pyenv) D:\CD_Inhalt\UpperLimb>where python
D:\CD_Inhalt\UpperLimb\Python\pyenv\Scripts\python.exe

運行我的腳本顯示錯誤:

(pyenv) D:\CD_Inhalt\UpperLimb>UpperLimb.py
Traceback (most recent call last):
File "D:\CD_Inhalt\UpperLimb\UpperLimb.py", line 11, in <module>
import c3d
ModuleNotFoundError: No module named 'c3d'

但我知道我安裝了 c3d:

(pyenv) D:\CD_Inhalt\UpperLimb>pip list
Package         Version
--------------- ---------
appdirs         1.4.4
c3d             0.3.0
certifi         2020.12.5
chardet         4.0.0
...

這台電腦沒有安裝 Python。 運行 print(sys.path) 顯示如下:

(pyenv) D:\CD_Inhalt\UpperLimb>python
Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec  7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', 'D:\\CD_Inhalt\\UpperLimb\\Python\\pyver\\py391\\python39.zip', 'D:\\CD_Inhalt\\UpperLimb        
\\Python\\pyver\\py391\\DLLs', 'D:\\CD_Inhalt\\UpperLimb\\Python\\pyver\\py391\\lib',     
'D:\\CD_Inhalt\\UpperLimb\\Python\\pyver\\py391', 'D:\\CD_Inhalt\\UpperLimb\\Python\\pyenv', 
'D:\\CD_Inhalt\\UpperLimb\\Python\\pyenv\\lib\\site-packages']

那么我到底在哪里犯了錯誤? 我很困惑。 感謝任何幫助:) 問候

編輯 1:就像 hoefling 提到的那樣。 如果我寫python UpperLimb.py它可以工作。 如何直接將其作為可執行文件運行? 之前沒有python

這是一個XY 問題 讓我先告訴您如何解決您的問題,然后在附錄中解釋您遇到問題的原因。

1)解決問題:創建可移植應用程序

您最初的問題在第一段:您想與某人共享您的 python 腳本/應用程序,而不是強迫用戶安裝 python。 虛擬環境不能解決您的問題 雖然,它們是解決方案的一部分,因為任何應用程序開發都應該在虛擬環境中完成,以使您的項目隔離。 虛擬環境不可移植; 它們依賴於創建它們的機器上的 python 安裝

如果你想分享你的代碼,你有三種不同的選擇

(1) 創建和執行
許多人喜歡使用cx_FreezepyinstallerNuitka等工具從 python 代碼創建可執行文件。 不過,也有一些陷阱。 這些工具適用於簡單的應用程序,但對於使用大量 static 文件、擴展模塊 (.dlls) 或依賴模塊的__file__屬性來訪問文件系統上的文件的更大和更復雜的應用程序可能會很痛苦。 只需使用工具名在 SO 上進行簡單搜索即可查看一些示例案例。

(2) 與便攜式 python 共享代碼
有便攜式 python 版本。 例如WinPython或來自 Python.org 的可嵌入Python。 您可以將它們與您的應用程序代碼和運行python.exe myscript (使用相對路徑)的簡單.bat文件一起打包。 如果您有外部依賴項(某些包),您可以包含它們的.whl文件(從 PyPI 下載),並讓您的.bat也安裝它們。 我之前使用非常復雜的 python 程序成功地完成了這項工作,並將我的程序處理給對 python 毫無頭緒的最終用戶。 不過,這需要一些努力和手工工作。

(3) 使用 pynsist
另一種方法是使用pynsist來完成這項工作。 它用於分發 python 應用程序,但它不會生成單個“myapp.exe”。 它所做的基本上是自動化“使用可移植 python 共享代碼”。 它還創建了一個安裝程序,您可以只處理給您的朋友使用,並且安裝的程序將在 Windows 開始菜單和已安裝的應用程序中可見。 它甚至創建了一個快捷方式,您的用戶將永遠不必自己安裝 python,甚至知道您的應用程序是使用 Python 創建的。


附錄

關於你所面臨的問題的一些解釋。

A1) 關於啟動 python 腳本

當您啟動 python 腳本時,您通常鍵入python myscript.py 發生的情況是您的操作系統 (Windows) 將在文件夾列表中搜索python.exe ,當它找到它時,它會使用python.exe來運行您的腳本。 此文件夾列表稱為 PATH 環境變量。

激活腳本(powershell 的Activate.ps1和 cmd 的activate.bat )的作用是將包含python.exe的虛擬環境的文件夾添加到路徑的頂部,所以當你運行

python myscript.py

將使用虛擬環境中的python.exe (此處pyenv/Scripts/python.exe ),這也保證了安裝在虛擬環境中的包被找到。

A2) 只運行myscript.py

在 Windows 上,標准 Python 安裝程序關聯.py 文件與 Python 可執行文件 我對其進行了測試,它似乎是使用的 Windows ( py.exe ) 的特殊Python Launcher 所以,當你輸入

myscript.py

在命令行上,它將作為<full-path-to-py>/py.exe myscript.py運行。 如果您只是在文件資源管理器中雙擊myscript.py ,則會發生完全相同的事情。 如果您願意,您可以通過右鍵單擊 a.py 文件 ->“打開方式”->“選擇應用程序”->選中“始終使用此應用程序”來更改默認程序,但這對您的問題沒有幫助。

如果您想直接運行腳本而不使用之前的 python,那么您必須告訴代碼它應該使用哪個程序來運行此代碼。

假設您在 /usr/bin/python 上安裝了 python,那么您必須在 python 文件中寫入要使用的程序。 在這種情況下,它是 python。

因此,UpperLimb.py 文件中的第一行將是#!/usr/bin/python 這一行將告訴程序使用 /usr/bin/python 中的 python 程序。

在此之后,您需要使該腳本可執行。 您可以使用以下命令使該文件可執行。

$ chmod +x UpperLimb.py

現在,您可以使用命令./UpperLimb.py按如下方式運行此文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM