当前位置: 首页 > 面试题库 >

为什么PyImport_Import无法从当前目录加载模块?

姬高扬
2023-03-14
问题内容

我正在尝试运行嵌入示例,除非我将其明确添加到当前工作目录中,否则无法从当前工作目录中加载该模块sys.path

PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");

Python是否不应该在当前目录中查找模块?

Edit1 :尝试使用以下命令导入模块:

Py_Initialize();
PyRun_SimpleString("import multiply");

并且仍然失败,并显示以下错误:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named multiply

Edit2 :从sys.path
文档中:

如果脚本目录不可用(例如,如果解释器是交互式调用的,或者从标准输入中读取了脚本),则path [0]
是空字符串,它指示Python首先在当前目录中搜索模块

不知道 不可用 意味着什么,但是如果我打印,sys.path[0]它不是空的:

/usr/lib/pymodules/python2.7

问题答案:

您需要要求PySys_SetArgv(int argc, char **argv, int updatepath)相对进口工作。这会将执行脚本的路径添加到sys.pathif updatepathis
0(更多信息,请参考文档)。

以下应该做的把戏

#include <Python.h>

int
main(int argc, char *argv[])
{
  Py_SetProgramName(argv[0]);  /* optional but recommended */
  Py_Initialize();
  PySys_SetArgv(argc, argv); // must call this to get sys.argv and relative imports
  PyRun_SimpleString("import os, sys\n"
                     "print sys.argv, \"\\n\".join(sys.path)\n"
                     "print os.getcwd()\n"
                     "import thing\n" // import a relative module
                     "thing.printer()\n");
  Py_Finalize();
  return 0;
}


 类似资料:
  • 我试图运行一个. jar文件,这是在Netbean中成功创建的,我收到以下错误: 初始化VM java时出错。lang.错误:Properties init:无法确定当前工作目录。在爪哇。lang.System。java上的initProperties(本机方法)。lang.System。initializeSystemClass(System.java:1070) 我键入以运行的命令。罐子是 我

  • 我想在不同的子目录中保存不同的css和js文件,这是我的目录结构 然后我尝试将所有这些文件导入到我的索引中。html文件(由“/”映射),但没有正确导入。我应该配置什么使Spring boot能够在“资源”下的所有子目录中递归搜索资源?另外,如果我还想将所有html模板放在子目录中,该怎么办?

  • 问题内容: 我正在尝试安装和使用Evernote模块(https://github.com/evernote/evernote-sdk- python )。我跑了,说安装成功了。 我可以确认Evernote模块存在于中。但是,当我尝试运行时,出现以下错误: 这是我的内容: 我在安装其他模块时遇到了同样的问题。救命? 编辑:我是一个超级新手,还没有编辑该文件。 编辑:输出以下内容: 编辑: 通过添加

  • 问题内容: 我从Git存储库导入了一个项目,并在Eclipse中为其添加了Maven性质。在资源文件夹中,我添加了一个名为的配置文件。现在,每当我尝试从Java代码打开此文件时,都会得到。该文件也存在于maven编译项目后生成的文件夹中。 谁能告诉我可能是什么问题?我尝试加载此文件的Java代码是: 其中是一个对象。 谁能给我一些有关如何解决此问题的提示? 问题答案: 如果文件在编译后被放置在目标

  • 我从Git存储库中导入了一个项目,并在Eclipse中向其添加了Maven nature。在resources文件夹中,我添加了一个名为的配置文件。现在,每当我试图从我的Java代码打开这个文件时,我会得到。该文件也存在于maven编译项目后生成的文件夹中。

  • 我正在运行我的NodeJs应用程序,我收到一个错误。 编辑