0

VS c# でこのコードを実行しようとしています:

    //calls script that will be executed as a new Thread
    private void portfolioAnalysisToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Thread myThread = new Thread(new ThreadStart(StartPy));
        myThread.Start();

    }

    //directory and script
    public static void StartPy()
    {

        string filename = "\\Scripts\\HM1.py";
        string path = Assembly.GetExecutingAssembly().Location;
        string rootDir = Directory.GetParent(path).FullName;

        RunPythonFile(rootDir, filename);
    }


    public static double RunPythonFile(string rootDir, string filename)
    {

        ScriptEngine engine = Python.CreateEngine();


        ScriptScope scope = engine.CreateScope();

        ICollection<string> paths = engine.GetSearchPaths();
        string dir = @"C:\Python27\Lib";
        paths.Add(dir);
        string dir2 = @"C:\Python27\Lib\site-packages";
        paths.Add(dir2);
        string dir3 = @"C:\Python27\Dlls";
        paths.Add(dir3);
        engine.SetSearchPaths(paths);

        ScriptSource source;
        source = engine.CreateScriptSourceFromFile(rootDir + filename);

        double result = source.Execute(scope);
        return result;
    }

エラーは次の行に表示されます: "double result = source.Execute(scope);" 「LightException」オブジェクトには属性「qstkutil」がありません

Pythonコードは次のとおりです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import QSTK.qstkutil.qsdateutil as du
import QSTK.qstkutil.tsutil as tsu
import QSTK.qstkutil.DataAccess as da

import datetime as dt
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import itertools

def main():
    ''' Main Function'''


ls_symbols = ["AAPL", "GLD", "GOOG","XOM"]
dt_start = dt.datetime(2011, 1, 1)
dt_end = dt.datetime(2011, 12, 31)
dt_timeofday = dt.timedelta(hours=16)
ldt_timestamps = du.getNYSEdays(dt_start, dt_end, dt_timeofday)


c_dataobj = da.DataAccess('Yahoo')
ls_keys = ['open', 'high', 'low', 'close', 'volume', 'actual_close']
ldf_data = c_dataobj.get_data(ldt_timestamps, ls_symbols, ls_keys)
d_data = dict(zip(ls_keys, ldf_data))


na_price = d_data['close'].values


na_normalized_price = na_price / na_price[0, :]

cumm_ret = na_normalized_price.copy()
allo=np.arange(0,1.1,0.1)
valid_allocations=[[float('%.1f'%a),float('%.1f'%b),float('%.1f'%c),float('%.1f'%d)] for a in allo for b in allo for c in allo for d in allo if a+b+c+d==1]

sharpe = 0
max_a = 0
avg = 0
std = 0
best_sharpe = 0.0
best_alloc = 0

for i in range(0,len(valid_allocations)-1):

    ls_alloc = valid_allocations[i]

    fund_inv = cumm_ret * ls_alloc

    tot_fund_inv = np.sum(fund_inv,axis=1)

    daily_ret = tsu.returnize0(tot_fund_inv)

    avg_daily_ret = np.average(daily_ret)

    std_dev = np.std(daily_ret)

    sharpe_ratio = np.sqrt(252) * (avg_daily_ret/std_dev)

    if sharpe_ratio > best_sharpe:

        best_sharpe = sharpe_ratio
        best_alloc = ls_alloc

print best_sharpe, best_alloc


if __name__ == '__main__':
    main()

助けてくれてありがとう!!

ipy.exe -X:ExceptionDetail -X:ShowClrExceptions で実行すると、スタック トレースは次のようになります。

'LightException' object has no attribute 'qstkutil'/Scripts/HM1.py')
   em IronPython.Runtime.Operations.PythonOps.GetBoundAttr(CodeContext context,
  Object o, String name)
   em IronPython.Runtime.Operations.PythonOps.ImportBottom(CodeContext context,
  String fullName, Int32 level)
   em Microsoft.Scripting.Interpreter.FuncCallInstruction`4.Run(InterpretedFrame
 frame)
   em Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   em Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 a
  rg1)
   em IronPython.Runtime.FunctionCode.Call(CodeContext context)
   em IronPython.Modules.Builtin.execfile(CodeContext context, Object filename,
  Object globals, Object locals)
   em IronPython.Modules.Builtin.execfile(CodeContext context, Object filename)
   em Microsoft.Scripting.Interpreter.ActionCallInstruction`2.Run(InterpretedFra
  me frame)
   em Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   em Microsoft.Scripting.Interpreter.LightLambda.Run4[T0,T1,T2,T3,TRet](T0 arg0
  , T1 arg1, T2 arg2, T3 arg3)
   em IronPython.Compiler.Ast.CallExpression.Invoke1Instruction.Run(InterpretedF
  rame frame)
   em Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   em Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 a
  rg1)
   em IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
   em IronPython.Compiler.PythonScriptCode.Run(Scope scope)
   em IronPython.Hosting.PythonCommandLine.<>c__DisplayClass1.<RunOneInteraction
  >b__0()
  AttributeError: 'LightException' object has no attribute 'qstkutil'
  CLR Exception:
    MissingMemberException
  :
  'LightException' object has no attribute 'qstkutil'

そのため... -X:Debug を指定して実行すると、まず IronPython を呼び出すと、次のように表示されました。

   Error processing line 1 of C:\Program Files (x86)\IronPython 2.7\lib\site-packag
es\QSTK-0.2.6-py2.7-nspkg.pth:

  Traceback (most recent call last):
    File "C:\Program Files (x86)\IronPython 2.7\Lib\site.py", line 164, in addpackage
      exec line
    File "<string>", line 1, in <module>
  AttributeError: 'module' object has no attribute '_getframe'

Remainder of file ignored
Error processing line 1 of C:\Program Files (x86)\IronPython 2.7\lib\site-         packages\statsmodels-0.4.3-py2.7-nspkg.pth:

  Traceback (most recent call last):
    File "C:\Program Files (x86)\IronPython 2.7\Lib\site.py", line 164, in addpackage
      exec line
    File "<string>", line 1, in <module>
  AttributeError: 'module' object has no attribute '_getframe'

Remainder of file ignored
IronPython 2.7.4 (2.7.0.40) on .NET 4.0.30319.18408 (32-bit)
Type "help", "copyright", "credits" or "license" for more information.

そしてプログラムを実行します:

   'LightException' object has no attribute 'qstkutil'
  em IronPython.Runtime.Operations.PythonOps.GetBoundAttr(CodeContext context,
 Object o, String name)
  em IronPython.Runtime.Operations.PythonOps.ImportBottom(CodeContext context,
 String fullName, Int32 level)
  em Microsoft.Scripting.Interpreter.FuncCallInstruction`4.Run(InterpretedFrame
  frame)
  em Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
  em Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 a
 rg1)
  em IronPython.Runtime.FunctionCode.Call(CodeContext context)
  em IronPython.Modules.Builtin.execfile(CodeContext context, Object filename,
 Object globals, Object locals)
  em IronPython.Modules.Builtin.execfile(CodeContext context, Object filename)
  em Microsoft.Scripting.Interpreter.ActionCallInstruction`2.Run(InterpretedFra
 me frame)
  em Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
  em Microsoft.Scripting.Interpreter.LightLambda.Run4[T0,T1,T2,T3,TRet](T0 arg0
 , T1 arg1, T2 arg2, T3 arg3)
  em System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite s
 ite, T0 arg0, T1 arg1, T2 arg2)
  em <unnamed>$18.<unnamed>(CodeContext $globalContext, FunctionCode $functionC
 ode) na <stdin>:linha 1
  em IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
  em IronPython.Compiler.PythonScriptCode.Run(Scope scope)
  em IronPython.Hosting.PythonCommandLine.<>c__DisplayClass1.<RunOneInteraction
 >b__0()
 AttributeError: 'LightException' object has no attribute 'qstkutil'
4

0 に答える 0