2017-09-14 35 views
0

我有兩個python腳本在同一個目錄(C:\\Users\\user1\\general)。我想從第二個腳本執行一個腳本中的函數,所以我試圖導入script1script2。這裏是我的script2python導入另一個python腳本不工作

import sys 
sys.path.insert(0, 'C:\\Users\\user1\\general') 
import script1 
from flask import Flask 
from flask_socketio import SocketIO, send 


app = Flask(__name__) 
app.config['SECRET_KEY'] = 'mysecret' 
socketio = SocketIO(app) 

@socketio.on('message') 
def handleMessage(msg): 
    print('Message: ' + msg) 
    # script1 has function called api_call(id,message) 
    messsage = api_call('user1', msg) 
    send(messsage, broadcast=True) 

if __name__ == '__main__': 
    socketio.run(app) 

這裏是我的script1

import sys 

def api_call(Id,message): 
    # Code processing 


if __name__ == '__main__': 

    uId = sys.argv[0] 
    message = sys.argv[1] 
    api_call(userId,message) 

當我執行上述script2我得到NameError: name 'api_call' is not defined。這似乎不知道script1沒有得到導入,所以功能沒有通過。

注意:早些時候我已經嘗試過,沒有使用sys.path.insert(),然後也是相同的結果。

+1

你從SCRIPT1進口*嘗試''? – saniales

+2

或將'script2'中的'api_call'改爲'script1.api_call'? – FamousJameous

+2

@saniales這是一個非常糟糕的做法。 –

回答

3

嘗試from script1 import api_call:這將允許從script1模塊導入api_call函數。

-1

的Python 2

創建在同一文件夾__init__.py

導入使用下面的命令

from script1 import api_call


的Python 3

導入使用下面的命令

from .script1 import api_call

+1

此語法('from .module import ...')是指從子模塊進行相對導入。應該在包**內使用**,似乎不是一個合適的解決方案。 '__init __。py'也是一樣,包含這個文件的存儲庫將被識別爲一個包,這不是必需的,在這裏可能不需要。 – FabienP

相關問題