簡體   English   中英

我如何告訴 SpringBoot 在哪里可以找到 Python 個包?

[英]How do I tell SpringBoot where to find Python packages?

我已經在 Ubuntu 服務器 20.04 中安裝了幾個 Python 庫,例如名為“flair”的“ML”庫。

現在,雖然我可以運行 flair python 程序,例如,在 Ubuntu 20.04 服務器(Ubuntu 知道去哪里找)中的命令行運行良好,當我運行相同的邏輯時($python3 + " " + program path.py + “” + 數據路徑)來自 SpringBoot(一個 WAR 文件),我得到的消息是:

進口天賦

ModuleNotFoundError: No module named 'flair'

這種 Springboot 方法在 Windows 中運行良好,但我在 Ubuntu 中丟失了一些東西。

因此,我不確定 SpringBoot 在哪里尋找 Python 模塊(或一般)。 沒有名為“CLASSPATH”的環境變量,只有路徑。

但是,我更改了常規路徑變量以將 site-packages 文件夾包含在/home/ubuntu/.local/lib/python3.8/site-packages下,但這沒有任何區別。

我創建了一個 CLASSPATH 變量來查看是否有幫助,但是 SpringBoot(WAR 文件上下文)仍然沒有在 Ubuntu 路徑中找到包。

那么,我需要將 Python 模塊放在哪里,或者我如何通過環境變量或其他方法告訴 SpringBoot 它們現在在哪里?

謝謝,

通常,您需要兩件事:確保python可執行文件在您的PATH上可用,並且PYTHONPATH包含flair package 的位置,以便可以導入它。

使用Runtime.exec()ProcessBuilder應該沒問題。 我選擇了ProcessBuilder ,因為它使用起來更方便。

這是一個代碼片段,它啟動了一個導入flair的 python 腳本,然后打印當前工作目錄和sys.path內容:

ProcessBuilder builder = new ProcessBuilder(
    "python3", 
    "-c", 
    "import os; import sys; import flair; print(os.getcwd()); print(sys.path)"
)
    .directory(new File("/home/user/tmp/flair"))
    .inheritIO();

// I used one of the virtual envs available on my machine with flair installed
builder.environment().put("PYTHONPATH", ".venv/lib/python3.10/site-packages");

Process p = builder.start();

對我來說它打印:

/home/user/tmp/flair
['', '/home/user/tmp/flair/.venv/lib/python3.10/site-packages', '/usr/local/python@3.10/3.10.9/lib/python3.10', '/usr/local/python@3.10/3.10.9/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/site-packages']

當我刪除設置環境的行時,我收到錯誤消息,因為找不到 flair。

ModuleNotFoundError: No module named 'flair'

看看它是否適合你。

暫無
暫無

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

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