簡體   English   中英

運行包含來自節點文件的相對導入的 python 腳本

[英]Running python script containing relative imports from node file

我正在構建一個具有用於處理路由的節點后端的應用程序,但我還在 python 中使用了一些機器學習包。我正在將我的 python 腳本與節點集成,以便節點可以將數據發送到並運行我的python函數,然后得到一些返回數據。 我在將我定義的 class 從另一個文件夾中的另一個 python 文件導入我從節點文件運行的 python 文件時遇到問題。 在任何人向我發送有關相關進口的相關問題或幫助文章之前 - 我 promise 你我已經閱讀了很多。 我的問題是我正在從我的節點文件(與兩個 python 文件位於不同的文件夾中)運行 python child_process 來執行我的 python 文件。 我試圖在我的 child_process spawn 命令中加入一個“-m”開關,如下所示:

const py = spawn('python', ['-m','../Python/Functions/upload.py', stringifiedData]);

但沒有收到 output。我的目錄是這樣構建的:

App
|
|-Backend
          |
          |-Node
                server.js
          |-Python
                  | 
                  |-Classes
                           image.py
                  |-Functions
                           upload.py

並且在Python、Functions、Classes文件夾下都有init.py文件。

在我的 server.js 文件中(在 Node 文件夾中)

const {spawn} = require('child_process')

const data = '[1,2,3]'

const stringifiedData = JSON.stringify(data)

const py = spawn('python', ['../Python/Functions/upload.py', stringifiedData]);

py.stdout.on('data', (data) => {
    console.log(`stdout: data received from node ${data}`)
})


py.stdout.on('close', (code) => {
    console.log(`exited with code ${code}`)
})

在我的 image.py 文件中(在 Classes 文件夾中)

class Image():
  ***all my class attributes and class methods***

在我的 upload.py 文件中(通過 child_process 在 server.js 文件中運行,python 文件本身在 Functions 文件夾中)

import sys
import os

if __name__ == '__main__':
    print('hi from python')
    pdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    import_path = os.path.join(pdir, 'Classes/')
    sys.path.append(import_path)
    os.chdir(import_path)
    
    print(sys.path)

    try:
        from image import Image
 
        i = Image(sys.argv[1])
        print(i.filepath) ##Doing this just to see if my object instantiates 


    except Exception as error:
        print(error)

將路徑附加到類文件夾並將目錄更改為該文件夾對我來說很有效,但這並不是最干凈的導入方式,總的來說,我真的不想再面對“沒有已知父級的無相對導入”包'錯誤。 我將非常感激再也不會在命令行上看到這個 output,以及“No module named X”...所以如果有人可以就為什么代碼提供一些建議

from Classes import image

返回“沒有名為類的模塊”,以及為什么

from .image import Image

返回“沒有已知父包的嘗試相對導入”我真的很感激。

我可以偷懶直接將我的 class 代碼插入 function upload.py 文件,但我有很多類和函數,function 文件中的代碼會比現在更多,所以我想保留它們分開到各自的文件夾。

-m開關采用模塊名稱而不是路徑。 所以,假設當前工作目錄是Backend ,那么命令應該是這樣的(我從未使用過節點):

const py = spawn('python', ['-m','Python.Functions.upload', stringifiedData]);

暫無
暫無

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

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