<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.7601.17514">
<STYLE>@font-face {
        font-family: 宋体;
}
@font-face {
        font-family: Verdana;
}
@font-face {
        font-family: @宋体;
}
@page Section1 {size: 595.3pt 841.9pt; margin: 72.0pt 90.0pt 72.0pt 90.0pt; layout-grid: 15.6pt; }
P.MsoNormal {
        TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"; FONT-SIZE: 10.5pt
}
LI.MsoNormal {
        TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"; FONT-SIZE: 10.5pt
}
DIV.MsoNormal {
        TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"; FONT-SIZE: 10.5pt
}
A:link {
        COLOR: blue; TEXT-DECORATION: underline
}
SPAN.MsoHyperlink {
        COLOR: blue; TEXT-DECORATION: underline
}
A:visited {
        COLOR: purple; TEXT-DECORATION: underline
}
SPAN.MsoHyperlinkFollowed {
        COLOR: purple; TEXT-DECORATION: underline
}
SPAN.EmailStyle17 {
        FONT-STYLE: normal; FONT-FAMILY: Verdana; COLOR: windowtext; FONT-WEIGHT: normal; TEXT-DECORATION: none; mso-style-type: personal-compose
}
DIV.Section1 {
        page: Section1
}
UNKNOWN {
        FONT-SIZE: 10pt
}
BLOCKQUOTE {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 2em
}
OL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
UL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
</STYLE>
</HEAD>
<BODY style="MARGIN: 10px; FONT-FAMILY: verdana; FONT-SIZE: 10pt">
<DIV><FONT color=#000080 size=2 face=Verdana>Thanks for your code, 
Bradley</FONT></DIV>
<DIV><FONT color=#000080></FONT> </DIV>
<DIV><FONT color=#000080 size=2 face=Verdana>
<DIV>I followed your sample,  add the path first , 
then  PythonEngine.ImportModule,</DIV>spending all the day in 
embeding the third part C-based library into my C# code, but <FONT 
color=#000000>PythonEngine.ImportModule still return Null.</FONT></FONT></DIV>
<DIV>I wrote a simple test C dll (only one function returns a+1), and a 
wrapper py file using the ctypes.</DIV>
<DIV>Then load the py file in C#, the PythonEngine.ImportModule does return a 
non-null value, but when invoke the function is saids can not find the 
dll. When I put the dll in the Python root dir (on my end is 
C:\Python262\) , the py file runs smoothly. I try to add the path of the dll 
into sys.path, but does not work, only putting it into the Python root dir 
works.</DIV>
<DIV> </DIV>
<DIV>So I think the situation is: third part C-base python library (in my 
case, rtree and psycopg2) uses more complex ctypes warpper, so maybe 
the python.net is incomptible to it?  or I still have some chance to make 
it work, maybe still the sys.path problem?</DIV>
<DIV> </DIV>
<DIV>Thanks</DIV>
<DIV> </DIV>
<DIV>Zhiyu Li</DIV>
<DIV>                                 </DIV>
<DIV><FONT color=#000080 size=2 face=Verdana></FONT> </DIV>
<DIV><FONT color=#000080 size=2 face=Verdana></FONT> </DIV>
<DIV><FONT color=#c0c0c0 size=2 face=Verdana>2013-03-29 </FONT></DIV><FONT 
color=#000080 size=2 face=Verdana>
<HR style="WIDTH: 100px" align=left color=#b5c4df SIZE=1>
</FONT>
<DIV><FONT color=#c0c0c0 size=2 face=Verdana><SPAN>lizy10b</SPAN> </FONT></DIV>
<HR color=#b5c4df SIZE=1>

<DIV><FONT size=2 face=Verdana><STRONG>发件人:</STRONG> brad@fie.us </FONT></DIV>
<DIV><FONT size=2 face=Verdana><STRONG>发送时间:</STRONG> 2013-03-29  06:03:32 
</FONT></DIV>
<DIV><FONT size=2 face=Verdana><STRONG>收件人:</STRONG> lizy10b </FONT></DIV>
<DIV><FONT size=2 face=Verdana><STRONG>抄送:</STRONG> pythondotnet </FONT></DIV>
<DIV><FONT size=2 face=Verdana><STRONG>主题:</STRONG> Re: [Python.NET] how to load 
and execute py file which consumes a thrid part C-based python extension in C# 
code </FONT></DIV>
<DIV><FONT size=2 face=Verdana></FONT> </DIV>
<DIV><FONT size=2 face=Verdana>Sorry.  One more.
<DIV><BR></DIV>
<DIV>When my code then executes those callbacks, back into Python, it does so 
this way:</DIV>
<DIV><BR></DIV>
<DIV>            System.Console.WriteLine("Getting 
Projects");<BR>            List<libcontextutilsclient.ProjectContextSettings> ret = new List<libcontextutilsclient.ProjectContextSettings>(); 
//the things I expect python to give me 
back<BR>            System.Console.WriteLine("Getting 
lock");<BR>            IntPtr p = this.Pedestal.GetPythonLock();<BR>            System.Console.WriteLine("Got 
Lock");<BR>            if (this.ProjectsRequested != null)<BR>            {<BR>                foreach (libcontextutils.GetProjectSettingsDelegate del in this.ProjectsRequested.GetInvocationList()) 
 //looping through callbacks on 
delegate<BR>                {<BR>                    System.Console.WriteLine("Calling 
Project 
Delegate");<BR>                    ret.AddRange(del(projectsType, this)); 
 //doing the callback, which is a python callback in 
truth.<BR>                }<BR>            }<BR>            else<BR>            {<BR>                System.Console.Error.WriteLine("No 
delegates registered to ProjectsRequested 
Event.");<BR>            }<BR>            System.Console.WriteLine("Releasing 
lock");<BR>            this.Pedestal.ReleasePythonLock(p);<BR>            System.Console.WriteLine("Released 
Lock");<BR>            return ret;<BR></DIV>
<DIV><BR>
<DIV>
<DIV>On Mar 28, 2013, at 5:34 PM, "<A href="mailto:brad@fie.us">brad@fie.us</A>" 
<<A href="mailto:brad@fie.us">brad@fie.us</A>> wrote:</DIV><BR 
class=Apple-interchange-newline>
<BLOCKQUOTE type="cite"><BASE href="x-msg://6533/">
  <DIV 
  style="WORD-WRAP: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space">In 
  my code I'm running:
  <DIV><BR></DIV>
  <DIV>                Python.Runtime.PythonEngine.Initialize();<BR>
  <DIV>
  <DIV><BR></DIV>
  <DIV>I also have these defined:</DIV>
  <DIV><BR></DIV>
  <DIV>        public void AddPythonPath(string path)<BR>        {<BR>            CheckInitPython();<BR>            IntPtr l = Python.Runtime.PythonEngine.AcquireLock();<BR>            Python.Runtime.PythonEngine.RunSimpleString("import 
  sys");<BR>            Python.Runtime.PythonEngine.RunSimpleString("sys.path.append(\"" + path.Replace("\\", "\\\\") + "\")");<BR>            Python.Runtime.PythonEngine.ReleaseLock(l);<BR>        }<BR><BR>        public Python.Runtime.PyObject ImportModule(string name)<BR>        {<BR>            CheckInitPython();<BR>            IntPtr l = Python.Runtime.PythonEngine.AcquireLock();<BR>            Python.Runtime.PyObject module = Python.Runtime.PythonEngine.ImportModule(name);<BR>            Python.Runtime.PythonEngine.ReleaseLock(l);<BR>            if (module == null)<BR>            {<BR>                throw new libscclient.PythonModuleNotCreatedException(name);<BR>            }<BR>            return module;<BR>        }<BR></DIV>
  <DIV><BR></DIV>
  <DIV>And when my code loads a "plugin" python module, it runs this:</DIV>
  <DIV><BR></DIV>
  <DIV>            string pythonVersionBasePath = GetPythonCodeBaseVersionPath(); 
  //my dynamic plugin 
  code.<BR>            string scriptName = GetPythonScriptName(); 
  //also my dynamic plugin 
  code.<BR>            System.Console.WriteLine("importing 
  module"); <BR>            Pedestal.AddPythonPath(pythonVersionBasePath); 
  //calling code 
  above<BR>            Python.Runtime.PyObject module = Pedestal.ImportModule(scriptName.Split(new char[] { '.' }, 2)[0]); 
   //calling code 
  above<BR>            System.Console.WriteLine("module 
  imported");<BR>            IntPtr l = Pedestal.GetPythonLock();<BR>            module.InvokeMethod(GetPythonInitMethodName(), new Python.Runtime.PyObject[] { Python.Runtime.PyObject.FromManagedObject(this) }); 
  //calling a method by name.  the name comes from my dynamic plugin 
  code.<BR>            module.Dispose(); 
  //I'm done with the module so I toss it.  my code here registers 
  callbacks.<BR>            Pedestal.ReleasePythonLock(l);<BR></DIV>
  <DIV><BR></DIV>
  <DIV>On Mar 28, 2013, at 2:09 PM, "lizy10b" <<A 
  href="mailto:lizy10b@126.com">lizy10b@126.com</A>> wrote:</DIV><BR 
  class=Apple-interchange-newline>
  <BLOCKQUOTE type="cite">
    <DIV 
    style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; MARGIN: 10px; FONT: 10pt verdana; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">
    <DIV><FONT color=#000080 size=2 face=Verdana>Thank you,<SPAN 
    class=Apple-converted-space> </SPAN><FONT 
    size=+0>Bradley.</FONT></FONT></DIV>
    <DIV><FONT color=#000080 size=2 face=Verdana>I found a simple sample 
    code on the maillist. Now I could load and execute a pure python function in 
    a py file in C#. </FONT></DIV>
    <DIV> </DIV>
    <DIV>And a new problem is that the 
    PythonEngine.ImportModule("modulename") method always return NULL in my 
    case. The modulename.py comsumes a third part ctypes wrapped library (the 
    Rtree 0.7 python library). It seems the PythonEngine can not 
    find it, but actually it has been installed to the default 
    path (C:\Python262\Lib\site-packages\rtree) , and the 
    modulename.py file runs smoothly under python command 
    line.</DIV>
    <DIV>I worte a new py file which only contains a function returning the 
    sys.path, and load it in C#, the sys.path seems OK.</DIV>
    <DIV>So I don't know what's wrong....</DIV>
    <DIV> </DIV>
    <DIV>Thanks.</DIV>
    <DIV> </DIV>
    <DIV>Zhiyu Li</DIV>
    <DIV> </DIV>
    <DIV> </DIV>
    <DIV> </DIV>
    <DIV><FONT color=#000080 size=2 face=Verdana></FONT> </DIV>
    <DIV><FONT color=#c0c0c0 size=2 face=Verdana>2013-03-29</FONT></DIV><FONT 
    color=#000080 size=2 face=Verdana>
    <HR style="WIDTH: 100px" align=left SIZE=1>
    </FONT>
    <DIV><FONT color=#c0c0c0 size=2 face=Verdana>lizy10b</FONT></DIV>
    <HR SIZE=1>

    <DIV><FONT size=2 face=Verdana><STRONG>发件人:</STRONG><SPAN 
    class=Apple-converted-space> </SPAN>Bradley Friedman</FONT></DIV>
    <DIV><FONT size=2 face=Verdana><STRONG>发送时间:</STRONG><SPAN 
    class=Apple-converted-space> </SPAN>2013-03-28  
    22:15:18</FONT></DIV>
    <DIV><FONT size=2 face=Verdana><STRONG>收件人:</STRONG><SPAN 
    class=Apple-converted-space> </SPAN>lizy10b</FONT></DIV>
    <DIV><FONT size=2 face=Verdana><STRONG>抄送:</STRONG><SPAN 
    class=Apple-converted-space> </SPAN>pythondotnet</FONT></DIV>
    <DIV><FONT size=2 face=Verdana><STRONG>主题:</STRONG><SPAN 
    class=Apple-converted-space> </SPAN>Re: [<A 
    style="COLOR: purple; TEXT-DECORATION: underline" 
    href="http://python.net/">Python.NET</A>] how to load and execute py file 
    which consumes a thrid part C-based python extension in C# code</FONT></DIV>
    <DIV><FONT size=2 face=Verdana></FONT></DIV>
    <DIV><FONT size=2 face=Verdana>
    <DIV style="-webkit-text-size-adjust: auto">What you are looking to do is 
    "embed" a python interpreter in your .net project, using pythonnet, and then 
    tell the runtime to execute your python script. </DIV>
    <DIV style="-webkit-text-size-adjust: auto"><BR></DIV>
    <DIV style="-webkit-text-size-adjust: auto">I have done this in one of my 
    projects. It does work. </DIV>
    <DIV style="-webkit-text-size-adjust: auto"><BR></DIV>
    <DIV style="-webkit-text-size-adjust: auto"><SPAN 
    style="LINE-HEIGHT: 19px; WHITE-SPACE: nowrap; FONT-SIZE: 15px; -webkit-text-size-adjust: none"><A 
    style="COLOR: purple; TEXT-DECORATION: underline" 
    href="http://pythonnet.sourceforge.net/readme.html#embedding">http://pythonnet.sourceforge.net/readme.html#embedding</A></SPAN></DIV>
    <DIV><BR><SPAN style="-webkit-text-size-adjust: auto">Sent from my 
    iPad</SPAN></DIV>
    <DIV style="-webkit-text-size-adjust: auto"><BR>On Mar 28, 2013, at 8:31 AM, 
    "lizy10b" <<A style="COLOR: purple; TEXT-DECORATION: underline" 
    href="mailto:lizy10b@126.com">lizy10b@126.com</A>> wrote:<BR><BR></DIV>
    <BLOCKQUOTE style="-webkit-text-size-adjust: auto" type="cite">
      <DIV><FONT size=2 face=Verdana>Hi there,</FONT></DIV>
      <DIV>   I am a freshman and new to<SPAN 
      class=Apple-converted-space> </SPAN><A 
      style="COLOR: purple; TEXT-DECORATION: underline" 
      href="http://python.net/">python.net</A>.</DIV>
      <DIV>I have a *.py script which calls a third part python library, 
      and the library is a ctypes python wrapper of a C++ dll (or say 
      C-based python extension?).</DIV>
      <DIV>Frist I tried to make it using IronPython. IronPython works 
      well when I load a pure python *.py (no third part 
      libraries) file and execute it in C# code.</DIV>
      <DIV>But it failed when I load a *.py which comsumes a thrid 
      part ctypes python wrapper library mentioned above.</DIV>
      <DIV> </DIV>
      <DIV>Then I turn to<SPAN class=Apple-converted-space> </SPAN><A 
      style="COLOR: purple; TEXT-DECORATION: underline" 
      href="http://python.net/">python.net</A>. But I don't know how to load and 
      execute *.py in C# code using<SPAN 
      class=Apple-converted-space> </SPAN><A 
      style="COLOR: purple; TEXT-DECORATION: underline" 
      href="http://python.net/">python.net</A>.</DIV>
      <DIV> </DIV>
      <DIV>Thanks.</DIV>
      <DIV> </DIV>
      <DIV>Zhiyu Li</DIV>
      <DIV>Student</DIV>
      <DIV>China</DIV>
      <DIV><FONT size=2 face=Verdana></FONT> </DIV>
      <DIV align=left><FONT color=#c0c0c0 size=2 
      face=Verdana>2013-03-28</FONT></DIV><FONT size=2 face=Verdana>
      <HR style="WIDTH: 122px; HEIGHT: 2px" align=left SIZE=2>

      <DIV><FONT color=#c0c0c0 size=2 
      face=Verdana><SPAN>lizy10b</SPAN></FONT></DIV></FONT></BLOCKQUOTE>
    <BLOCKQUOTE style="-webkit-text-size-adjust: auto" 
      type="cite"><SPAN>_________________________________________________</SPAN><BR><SPAN><A 
      style="COLOR: purple; TEXT-DECORATION: underline" 
      href="http://python.net/">Python.NET</A><SPAN 
      class=Apple-converted-space> </SPAN>mailing list -<SPAN 
      class=Apple-converted-space> </SPAN><A 
      style="COLOR: purple; TEXT-DECORATION: underline" 
      href="mailto:PythonDotNet@python.org">PythonDotNet@python.org</A></SPAN><BR><SPAN><A 
      style="COLOR: purple; TEXT-DECORATION: underline" 
      href="http://mail.python.org/mailman/listinfo/pythondotnet">http://mail.python.org/mailman/listinfo/pythondotnet</A></SPAN></BLOCKQUOTE></FONT></DIV></DIV></BLOCKQUOTE></DIV><BR></DIV></DIV>_________________________________________________<BR><A 
  href="http://Python.NET">Python.NET</A> mailing list - <A 
  href="mailto:PythonDotNet@python.org">PythonDotNet@python.org</A><BR><A 
  href="http://mail.python.org/mailman/listinfo/pythondotnet">http://mail.python.org/mailman/listinfo/pythondotnet</A></BLOCKQUOTE></DIV><BR></DIV></FONT></DIV></BODY></HTML>