【问题标题】:IronPython submodule importIronPython 子模块导入
【发布时间】:2016-07-06 18:56:48
【问题描述】:

我对 IronPython 模块导入处理有一个普遍的问题。

给定一个 Python 包,子模块可以通过相对引用相互引用。假设包名为 Poultry,其中的子模块是 Chicken.py 和 Duck.py。 Chicken 然后可以将 Duck 简单地作为“import Duck”导入,反之亦然。应用程序加载的 Python 脚本可以正确导入包,可以使用子模块并且一切正常。

包的目录结构如下:

+ - Poultry
| - __init__.py
| - Duck.py
L - Chicken.py

但是,例如,当我使用我的应用程序打开 Duck.py 时,我无法运行和调试它,因为 IronPython 在“import Chicken”行引发了一个导入错误,并显示“No module name Chicken”消息。

我知道这不是 IronPython 的严格问题,而是托管应用程序的问题。最后的问题是,如何修改我的托管应用程序以正确处理这些导入语句? 我应该在范围内设置一些路径变量,还是什么?如何让 Python 引擎理解当前加载的文件是特定包的一部分?

欢迎任何想法:-)

【问题讨论】:

    标签: c# python ironpython


    【解决方案1】:

    您必须始终将Duck 作为其包的一部分导入。在应用程序中,始终执行以下任一操作:

    import Poultry.Duck
    from Poultry import Duck
    

    如果你直接用解释器运行它,你必须使用-m switch as

    python -m Poultry.Duck
    

    【讨论】:

    • 感谢您的快速答复宫城先生。事实上,我将 Poultry.Duck 导入应用程序没有问题,它工作得很好。问题是当我打开 Duck.py 时,IronPython 无法处理 Duck.py 中存在的“import Chicken.py”的导入语句。
    【解决方案2】:

    您仍然需要通过输入 from Poultry import Chicken 来导入 Chicken。你不能只做import Chicken。项目中的任何文件都是一样的。

    【讨论】: