[Mono-list] IronPython ImportError - only when running as a service

David Jagoe davidjagoe at gmail.com
Sun Nov 21 04:35:33 EST 2010

G'day all,

I am embedding IronPython in a C# application and using the
Microsoft.Scripting tools (code posted below). The Python code
I'm embedding is trivially simple:

print "Running main.py"

import sys
print sys

# Exceptions not shown when running mono-service
    import time
    print time
except Exception, e:
    print e

print "done"

This works ok if I compile and execute the code as a stand-alone

However, if I run the code as a service (using System.ServiceProcess),
I manage to import sys but not time, even though they are both
built-in modules. I see the following error: 'No module named time'

I have also run this in Windows as a service with the same result, so it seems
like a feature rather than a bug.

I would be most grateful if anyone can explain the situation or tell
me what I'm doing wrong.


using System;
using System.ServiceProcess;

namespace Sample
    class MainClass
        public static void Main (string[] args)
            System.ServiceProcess.ServiceBase[] ServicesToRun;
            ServicesToRun = new System.ServiceProcess.ServiceBase[] {
                new SampleService() };

using System;
using System.ServiceProcess;
using System.Timers;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
using IronPython.Hosting;
using IronPython.Runtime;
using System.Reflection;
using System.IO;

namespace Sample

    public partial class SampleService : ServiceBase
        private runtime;

        public SampleService()
        string codebase = Assembly.GetAssembly(typeof(MainClass)).CodeBase;
	UriBuilder uri = new UriBuilder(codebase);
	string path = Path.GetDirectoryName(Uri.UnescapeDataString(uri.Path));
	string pythonPath = Path.Combine(path, "Python");
	ScriptRuntime runtime = Python.CreateRuntime();
	ScriptEngine engine = runtime.GetEngine("python");
	System.Collections.Generic.ICollection<string> search_paths =
        runtime.ExecuteFile(Path.Combine("Python", "main.py"));

More information about the Mono-list mailing list