标签: ironpython

使用非托管代码中的DLR

是否可以从非托管代码(如C++或Delphi)调用托管代码,特别是IronRuby或IronPython?

例如,我们有一个用Delphi编写的应用程序正在转移到C#.NET我们想在我们的新应用程序中提供Ruby或Python脚本来替换VBSCRIPT.但是,我们需要在旧的Delphi应用程序中提供Ruby/Python脚本.是否可以使用Delphi代码中IronRuby/IronPython提供的托管dll?

.net delphi ironpython ironruby unmanaged

5
推荐指数
2
解决办法
839
查看次数

Python需要一个GIL.但Jython和IronPython没有.为什么?

为什么你可以在不需要GIL但是Python(CPython)需要GIL的情况下运行Jython和IronPython?

python multithreading ironpython jython gil

5
推荐指数
2
解决办法
1940
查看次数

使用Jython/IronPython/Pajamas有什么优点/缺点?

编辑

好的,菜鸟在这里请耐心等待.我想问的是以下内容:

  1. 对于Python语法粉丝来说,使用其中一个选项而其他团队成员"普通的香草"版本是否合理?这是个人偏好的问题,还是需要将其他人转换为使用这些技术?
  2. 是否可以轻松地在Jython和Java或Pajamas和Javascript之间进行转换?
  3. 另外,一般来说,人们在"现实世界"中使用这些有哪些优点/缺点?

我认为更清楚地表明我正在寻找什么.任何在行业中使用这些技术的人的意见都会非常有帮助.

提前感谢您的见解.

python ironpython jython pyjamas

5
推荐指数
1
解决办法
3192
查看次数

从C#操作Python文件

我正在为我正在制作的游戏开发一些工具.这些工具可以作为使编辑游戏文件更容易的前端.其中一些文件是python脚本文件.例如,我有一个Items.py文件,其中包含以下内容(例如,最小化)

from ItemModule import *

import copy

class ScriptedItem(Item):
    def __init__(self, name, description, itemtypes, primarytype, flags, usability, value, throwpower):
        Item.__init__(self, name, description, itemtypes, primarytype, flags, usability, value, throwpower, Item.GetNextItemID())
    def Clone(self):
        return copy.deepcopy(self)

ItemLibrary.AddItem(ScriptedItem("Abounding Crystal", "A colourful crystal composed of many smaller crystals. It gives off a warm glow.", ItemType.SynthesisMaterial, ItemType.SynthesisMaterial, 0, ItemUsage.Unusable, 0, 50))
Run Code Online (Sandbox Code Playgroud)

正如我提到的,我想提供一个前端来编辑这个文件,而不需要编辑器直接知道python /编辑文件.我的编辑需要能够:

  1. 查找并列出所有类类型(在此示例中,它只是脚本项)
  2. 查找并列出所有创建的项目(在这种情况下,只有一个,Abounding Crystal).我需要找到类型(在本例中为ScriptBelptedItem)和所有参数值
  3. 允许编辑参数和创建/删除项目.

为此,我开始编写自己的解析器,查找类关键字以及何时使用这些记录的类来构造对象.这适用于简单的数据,但是当我开始使用具有复杂构造函数的类(列表,映射等)时,正确解析变得越来越困难.

在搜索之后,我发现IronPython可以很容易地解析python文件,所以这就是我要做的事情.一旦我构建了抽象语法树,我就使用PythonWalkers来识别和查找我需要的所有信息.这非常适合读取数据,但我没有看到将更新的数据推送到Python文件的简单方法.据我所知,没有办法改变AST中的值,更不用说将AST转换回脚本文件了.如果我错了,我会喜欢有人告诉我如何做到这一点.我现在需要做的是搜索文件直到找到正确的行,然后尝试将数据推送到构造函数中,确保正确的排序.

我有没有看到一些明显的解决方案?我应该继续处理我的解析器并使其支持更复杂的数据类型吗?我真的虽然我使用了IronPython解析器,但我没想到将修改后的数据推回文件是多么棘手.

任何建议,将不胜感激

c# python parsing ironpython

5
推荐指数
1
解决办法
984
查看次数

嵌入式IronPython安全性

我将IronPython嵌入到我的游戏引擎中,您可以在其中将脚本附加到对象.我不希望脚本能够随时访问CLR,因为它们几乎可以做任何事情.

拥有随机脚本,特别是从互联网上下载,能够打开互联网连接,访问用户硬盘或修改内部游戏状态是一件非常糟糕的事情.

通常人们会建议"使用单独的AppDomain".但是,除非我严重错误,否则跨AppDomains会很慢.非常慢.游戏引擎太慢了.所以我在寻找其他选择.

我想过编译一个自定义版本的IronPython会阻止你导入clr或任何命名空间,从而限制它到标准库.

我宁愿选择的选项如下:

__builtins__.__import__ = None #Stops imports working
reload = None #Stops reloading working (specifically stops them reloading builtins
          #giving back an unbroken __import___!
Run Code Online (Sandbox Code Playgroud)

我在另一个堆栈溢出帖子中读到了这个.假设不是设置__ builtins_ ._ import__为none,我将其设置为自定义函数,允许您加载标准API.

问题是,使用上面概述的方法,脚本能否有任何方式能够访问clr模块,.net BCL或其他任何可能造成坏处的事情?或者我应该修改源代码?第三种选择?

c# embed security ironpython

5
推荐指数
1
解决办法
895
查看次数

VisualStudio 2012中的IronPython

VisualStudio 2012中是否支持IronPython?我没有在模板中找到IronPython项目.

python ironpython visual-studio visual-studio-2012 ptvs

5
推荐指数
1
解决办法
9419
查看次数

从C#向IronPython发送匿名类型会抛出MissingMemberException

下面的代码抛出'MissingMemberException'

ScriptEngine engine = Python.CreateEngine();
ScriptRuntime runtime = engine.Runtime;
ScriptScope scope = runtime.CreateScope();

string code = "emp.Name==\"Bernie\"";

ScriptSource source =
  engine.CreateScriptSourceFromString(code, SourceCodeKind.Expression);

var emp = new {Name = "Bernie"};

scope.SetVariable("emp", emp);

var res = (double)source.Execute(scope);
Run Code Online (Sandbox Code Playgroud)

如果我声明一个名为'Employee'的类型并给它一个成员'Name',并使用它代替:

var emp = new Employee {Name = "Bernie"}
Run Code Online (Sandbox Code Playgroud)

它的工作方式与预期一致.有谁知道为什么它不适用于匿名类型,是否有解决方法?

c# ironpython anonymous-types

5
推荐指数
1
解决办法
333
查看次数

__import__ vs imp.load_module

尝试使用ironpython安装autopep8时出错:

ImportError: No module named logilab
Run Code Online (Sandbox Code Playgroud)

它失败的代码片段是:

def load_module(self, fullname):
    self._reopen()
    try:
        mod = imp.load_module(fullname, self.file, self.filename, self.etc)
    finally:
        if self.file:
            self.file.close()
    # Note: we don't set __loader__ because we want the module to look
    # normal; i.e. this is just a wrapper for standard import machinery
    return mod
Run Code Online (Sandbox Code Playgroud)

使用解释器ipy64导入logilab并没有失败.我为文件名添加了一个print语句,它显示:

C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\logilab_common-0.59.1-py2.7.egg\logilab
Run Code Online (Sandbox Code Playgroud)

该路径存在,它包含一个init .py,其中包含以下内容:

"""generated file, don't modify or your data will be lost"""
try:
    __import__('pkg_resources').declare_namespace(__name__)
except ImportError:
    pass
Run Code Online (Sandbox Code Playgroud)

我通过添加快速修复错误和脏

except ImportError:
    mod = __import__(fullname)
Run Code Online (Sandbox Code Playgroud)

但由于我不知道可能产生的影响,我对这个问题没有很好的感觉.

现在,为什么使用imp.load_module失败了,使用 …

import ironpython python-2.7

5
推荐指数
0
解决办法
897
查看次数

在IronPython 64 Bit上使用Numpy

是否有可能在IronPython 64位上使用numpy?我尝试使用Enthought分发的软件包,但它们不起作用.

有什么建议吗?是否有任何项目正在努力让numpy与64位IronPython一起工作?

ironpython numpy python-2.7 python.net

5
推荐指数
0
解决办法
364
查看次数

IronPython:意外令牌“来自”

我正在使用IronPython从.net运行python脚本,下面是我的python脚本

import tensorflow as tf    
print('Tensorflow Imported')
Run Code Online (Sandbox Code Playgroud)

下面是C#代码

using System;
using System.Text;
using System.IO;
using IronPython.Hosting;
using System.Collections.Generic;
using Microsoft.Scripting.Hosting;

namespace ConsoleApplication1
{
    class Program
    {
        private static void Main()
        {
            var py = Python.CreateEngine();
            List<string> searchPaths = new List<string>();
            searchPaths.Add(@"C:\Users\Admin\AppData\Local\Programs\Python\Python35\Lib)");
            searchPaths.Add(@"C:\Users\Admin\AppData\Local\Programs\Python\Python35\Lib\site-packages)");
            py.SetSearchPaths(searchPaths);
            try
            {
                py.ExecuteFile("script.py");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我的输出

意外的令牌“来自”

如果我删除import语句,则python脚本可以正常执行。我尝试过将os,sys所有这些导入,都没有任何问题。我已经通过pip安装了TensorFlow,当我通过python console(v3.5)运行以上脚本时,它可以正常工作。

更新:在TF文档中,其书面内容“ TensorFlow仅支持Windows上的Python版本3.5.x ”。但是IronPython的正式版本是2.7版,我很高兴在GitHub上找到IronPython ,并尝试构建它(我只是在控制台中键入build,然后对显示的错误消息列表感到惊讶!:D找不到预编译的错误消息!二进制文件

有什么其他方法可以在IronPython 2.7中导入tensorflow或在.net中运行Python?

.net c# python ironpython tensorflow

5
推荐指数
1
解决办法
3743
查看次数