2016-10-03 192 views
0

我曾嘗試在Visual Studio中使用IronPython運行python腳本,並且它很順利,直到我嘗試使用此代碼在python腳本中使用任何庫時。無法在Visual Studio中使用IronPython運行python腳本

var ipy = Python.CreateRuntime(); 
dynamic test = ipy.UseFile("C:/Python/Test.py"); 
var whatever = test.python_string(); 
MessageBox.Show(whatever); 

而Test.py看起來像這樣。

def python_string(): 
    return "Okay" 

當我嘗試添加

from moviepy.editor import * 

或任何其他libary import語句的Python代碼在Visual Studio程序將不會執行。

我使用的是Visual Studio 2015,並且我完全按照他們的網站所示設置了IronPython。我猜我必須將庫添加到Visual Studio中的某個地方,但我不知道在哪裏或如何。

希望我明確表示。提前致謝。

+0

[在Visual Studio中使用帶有庫的python文件](http://stackoverflow.com/questions/39862954/using-python-files-with-libraries-in-visual-studio) – denfromufa

回答

0

當我遇到這個問題時,在另一個地方有另一個類似性質的問題,但我現在沒有任何運氣。 (如果有人遇到它,請在評論中刪除鏈接。)

我得到它的工作方式是通過向腳本引擎添加路徑,就像這樣。

 ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(null); 
     ScriptRuntime runtime = new ScriptRuntime(setup); 
     ScriptEngine engine = Python.GetEngine(runtime); 

     var paths = engine.GetSearchPaths(); 
     paths.Add(prod.GetImportScope()); 
     paths.Add(AppDomain.CurrentDomain.BaseDirectory + "Lib"); 
     paths.Add(AppDomain.CurrentDomain.BaseDirectory + "selenium"); 
     engine.SetSearchPaths(paths); 

當您在IronPython中運行腳本時,它不會運行在Python文件通常的範圍內。所以你必須告訴它在哪裏可以找到你正在導入的Python StdLib和其他文件。即使腳本自行運行,它也不會在IronPython中告訴它在哪裏找到它的資源。

我不是IronPython的專家,所以可能有更高效的方法來做到這一點。

0

我在使用SharpDevelop時遇到了同樣的問題。請按照說明here併爲您的外部模塊/軟件包創建類庫(DLL)。將輸出的DLL添加到您的項目引用。然後在你的C#的main(),加載這些組件是這樣的:

// make sure to include "using System.IO" 

string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "serial.dll");    
engine.Runtime.LoadAssembly(Assembly.LoadFile(path)); 

engine指的是你的Python ScriptEngine

我用它來構建pyserial模塊的程序集,並將它們包含在C#/ IronPython項目中。我不知道是否有更好的方法,但經過幾個小時的挫折後,這對我來說是有效的。