C#调用Python,报错No module named os
C#调用Python
环境:Windows 8.1,已经安装Python2.7(C:\Python27),配置了环境变量. 已经安装VS2013,VS2017
1.安装IronPython
下载地址http://ironpython.net/download/ 我下载的是IronPython-2.7.4.3261515540.msi
安装目录为:F:\Program Files (x86)\IronPython 2.7
2.新建C#项目
打开vs2013,新建控制台程序CSharpCallPython
3.添加引用
在CSharpCallPython中添加引用,F:\Program Files (x86)\IronPython 2.7\Platforms\Net40下的IronPython.dll和Microsoft.Scripting.dll
4.在CSharpCallPython添加py脚本文件Python1.py,,并选择复制到本地,代码如下
def add(num1,num2):
return num1+num2;
5.在CSharpCallPython添加代码
ScriptRuntime pyRuntime = Python.CreateRuntime(); //创建一下运行环境
dynamic obj = pyRuntime.UseFile("Python1.py"); //调用一个Python文件
int a = , b = ;
int sum = obj.add(a,b); //调用Python文件中的求和函数
Console.Write("Sum:");
Console.WriteLine(sum);
运行结果Sum=3
调用到此结束,谢谢大家. 如果这样也许,那么这是不可能的.请看下文
6.如何引用第三方库
如何使用os下面的库呢,咱们继续 继续添加py脚本文件python2.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import shutil def ClearDirect(path):# for root, dirs, files in os.walk(path,topdown=False):
print 'root',root
for dir in dirs: print 'delete:',os.path.join(root, dir)
#os.removedirs(os.path.join(root, dir))
shutil.rmtree(os.path.join(root, dir)) return 'OK'
脚本用处是删除传入的目录的子目录 添加C#代码
ScriptRuntime pyRuntime2 = Python.CreateRuntime(); //创建一下运行环境
dynamic obj2 = pyRuntime.UseFile("Python2.py"); //调用一个Python文件
obj2.ClearDirect(@"D:\Data\KkImage\2017"); //
Console.Write("result ");
Console.WriteLine(sum);
运行后,十分抱歉,报错了
“IronPython.Runtime.Exceptions.ImportException”类型的未经处理的异常在 Microsoft.Dynamic.dll 中发生 其他信息: No module named os
找不到OS这个模块
7.怎么才能使用OS这个库呢
在python2.py中加入
import sys
sys.path.append("F:\Program Files (x86)\IronPython 2.7\lib")
代码变成
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
sys.path.append("F:\Program Files (x86)\IronPython 2.7\lib")
import os
import shutil def ClearDirect(path):#直接删除 for root, dirs, files in os.walk(path,topdown=False):
print 'root',root
for dir in dirs: print 'delete:',os.path.join(root, dir)
#os.removedirs(os.path.join(root, dir))
shutil.rmtree(os.path.join(root, dir)) return 'OK'
再次运行,发现子目录删除成功 . 祝贺你.
8.代码继续优化
在上面的python代码中,加了
sys.path.append("F:\Program Files (x86)\IronPython 2.7\lib")
这在程序发布了的时候,服务器上的路径是会变化的,如果有几十个python文件,难道还要挨个修改这个路径么?想想都恐怖.
所以,可以用下面的方法啦.(先把python文件中的sys.path.append("F:\Program Files (x86)\IronPython 2.7\lib"这句去掉)
ScriptRuntime pyRuntime3 = Python.CreateRuntime(); //创建一下运行环境
var engine = pyRuntime3.GetEngine("python");
var pyScope = engine.CreateScope();
var paths = engine.GetSearchPaths();
paths.Add(@"F:\Program Files (x86)\IronPython 2.7\lib");
engine.SetSearchPaths(paths);
dynamic obj3 = pyRuntime3.UseFile("Python2.py"); //调用一个Python文件
obj3.ClearDirect(@"D:\Data\KkImage\2017"); //
在engine中指定库的位置,就不用每个python文件中指定了
8.代码继续优化
源码地址:https://download.csdn.net/download/hanghangz/10397609
C#调用Python,报错No module named os的更多相关文章
- python报错No module named 'pylab'
pip instal matplotlib
- mac 上python编译报错No module named MySQLdb
mac 上python编译报错No module named MySQLdb You installed python You did brew install mysql You did expor ...
- python踩坑系列之导入包时下划红线及报错“No module named”问题
python踩坑系列之导入包时下划红线及报错“No module named”问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下(fileshand ...
- python manage.py startapp app 时候报错No module named _sqlite3
python manage.py startapp app 报错如下: File "manage.py", line 10, in <module> execut ...
- 在eclipse中用java调用python报错 Exception in thread "main" ImportError: Cannot import site module and its dependencies
最近做项目需要用java调用python,配置了jython后,运行了例子代码: 获得一个元组里面的元素: import org.python.util.PythonInterpreter; publ ...
- Python 导入requests报错No module named requests
刚开始是在Pycharm里面,发现就是不对,导入老提示No module named requests这个错误.后面发现是指向的python.exe路径不对,到setting里面设置换一下路径就好.
- python django2.x报错No module named 'django.core.urlresolvers'
解决方法就是: from django.urls import reverse 最近从django1.9迁移到django2.0中出现一个意外的报错: 这个报错的原因在stack overflow上有 ...
- Django:django-cors-headers 报错no module named "corsheaders"
django跨域使用 pip install django-cors-headers 然后在settings文件中加上参数设置 # app配置 INSTALLED_APPS = [ 'django.c ...
- salt-minion启动报错No module named salt.scripts
这是当初部署saltstack时候的问题了,saltstack用的是0.17.4的版本.正当minion部署到最后时候,启动 minion端时报错ImportError: No module name ...
随机推荐
- Eclipse安卓开发环境搭建
前提,Java SDK和Eclipse搭建完毕 下载android SDK并安装 (官网:http://sdk.android-studio.org/ ) 找到安装目录,运行“SDK Manager. ...
- 笔记:Maven 项目目录结构
Maven提倡使用一个共同的标准目录结构,使开发人员能在熟悉了一个Maven工程后,对其他的Maven工程也能清晰了解.这样做也省去了很多设置的麻烦,以下的文档介绍是Maven希望的目录结构,并且也是 ...
- MyBatis动态SQL小结
6:用于实现动态sql的元素及其用法 if+set--完成更新操作 if+where --完成多条件查询 if+完成多条件查询(替代where)或完成更新操作(替代set) choose(when,o ...
- ASP.NET MVC编程——缓存
Web缓存分为服务端缓存和客户端缓存. 1 服务端缓存 1.1请求域内的缓存:HttpContext.Items 类型: HttpContext.Items的类型为IDictionary,且键和值都是 ...
- 论文阅读——Visual inertial odometry using coupled nonlinear optimization
简介:论文提出一种新的视觉里程计算法,其直接利用带噪声的IMU数据和视觉特征位置来优化相机位姿.不同于对IMU和视觉数据运行分离的滤波器,这种算法将它们纳入联合的非线性优化框架中.视觉特征的透视重投影 ...
- JAVA设计模式之【装饰者模式】
JAVA设计模式之[装饰者模式] 装饰模式 对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮.更温馨.更实用. 在软件设计中,对已有对象(新房)的功能进行扩展(装修). 把通用功能封装在装 ...
- Bate版敏捷冲刺报告--day0
1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285) Git链接:https://github.com/WHUSE2017/C-team 2 ...
- 《Language Implementation Patterns》之访问&重写语法树
每个编程的人都学习过树遍历算法,但是AST的遍历并不是开始想象的那么简单.有几个因素会影响遍历算法:1)是否拥有节点的源码:2)是否子节点的访问方式是统一的:3)ast是homogeneous或het ...
- Struts2之Action的实现
对于Struts2框架来说,最重要的莫过于Action类的编写,类比于Servlet,Action类也是通过类的实例对象调用方法来处理请求的,Action类的实例对象是由Struts2的核心Filte ...
- 2017北京国庆刷题Day4 morning
期望得分:0+40+30=70 实际得分:0+10+10=20 题目修改:只能由0变1,只能用一次操作 大模拟 #include<cstdio> #include<cstring&g ...