Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过_init__.py扩展sys.path_Python - Fatal编程技术网

Python 通过_init__.py扩展sys.path

Python 通过_init__.py扩展sys.path,python,Python,从同级目录导入模块有很多线程,大多数建议要么简单地将init.py添加到源代码树,要么从这些init文件内部修改sys.path 假设我有以下项目结构: project_root/ __init__.py wrappers/ __init__.py wrapper1.py wrapper2.py samples/ __init__.py sample1.py sample2.p

从同级目录导入模块有很多线程,大多数建议要么简单地将init.py添加到源代码树,要么从这些init文件内部修改sys.path

假设我有以下项目结构:

project_root/
    __init__.py
    wrappers/
        __init__.py
        wrapper1.py
        wrapper2.py
    samples/
        __init__.py
        sample1.py
        sample2.py
所有init.py文件都包含将项目根目录的绝对路径插入sys.path的代码。无论我如何尝试将wrapperX模块导入sampleX,我都会得到“无模块名x”。当我尝试从sampleX打印sys.path时,它似乎不包含指向项目根的路径


那么如何正确使用init.py设置项目环境变量呢?

不要直接运行
sampleX.py
,而是作为模块执行:

# (in project root directory)
python -m samples.sample1
这样,您根本不需要摆弄
sys.path
(通常不鼓励这样做)。它还使以后将示例/包用作库变得更加容易


噢,init.py没有运行,因为只有在导入示例包时,它才会运行/导入(这或多或少是一样的),而不是在以脚本形式运行单个文件时。

不要直接运行
sampleX.py
,而是以模块形式执行:

# (in project root directory)
python -m samples.sample1
这样,您根本不需要摆弄
sys.path
(通常不鼓励这样做)。它还使以后将示例/包用作库变得更加容易


哦,init.py没有运行,因为只有在导入示例包时,它才会运行/导入(这或多或少是一样的),而不是在以脚本形式运行单个文件时。

我不确定这里发生了什么。我希望,您不希望project\u root/\uuuu init\uuu.py将project\u root插入您的sys.path中。因为这将是一个鸡和蛋类型的问题。我没有提到它,但是每个init.py都会检查project_根路径是否已经插入sys.path,如果没有,则插入它。所以没有鸡蛋鸡的问题。无论如何,为什么init.py没有任何影响?执行sampleX脚本时,sys.path仅包含当前脚本目录+一些标准库路径。我如何修复它?但如果尚未插入project\u root,则将找不到您的uu init\uu。因此,它们永远不会插入项目根。对吧?对不起,我是python新手,所以我可能做错了什么。我试图做的是直接从samples文件夹执行脚本。这就是我手动添加project_根路径的原因。当我在根目录中创建脚本时,我可以导入所需的所有内容。但当我在samples目录中创建并运行脚本并尝试从它的兄弟目录中导入某些内容时,我遇到了我提到的这些问题。所以,基本上,我希望有类似于C++中的行为,当你可以先指定目录列表,然后从任何地方都包含几乎所有的东西。我不确定这里发生了什么。我希望,您不希望project\u root/\uuuu init\uuu.py将project\u root插入您的sys.path中。因为这将是一个鸡和蛋类型的问题。我没有提到它,但是每个init.py都会检查project_根路径是否已经插入sys.path,如果没有,则插入它。所以没有鸡蛋鸡的问题。无论如何,为什么init.py没有任何影响?执行sampleX脚本时,sys.path仅包含当前脚本目录+一些标准库路径。我如何修复它?但如果尚未插入project\u root,则将找不到您的uu init\uu。因此,它们永远不会插入项目根。对吧?对不起,我是python新手,所以我可能做错了什么。我试图做的是直接从samples文件夹执行脚本。这就是我手动添加project_根路径的原因。当我在根目录中创建脚本时,我可以导入所需的所有内容。但当我在samples目录中创建并运行脚本并尝试从它的兄弟目录中导入某些内容时,我遇到了我提到的这些问题。所以,基本上我希望有类似于C++中的行为,当你可以先指定目录列表,然后从任何地方都包含所有的东西。Thans,这就是我要找的!