Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 运行脚本时发生ModuleNotFoundError错误_Python_Python 3.x_Bash - Fatal编程技术网

Python 运行脚本时发生ModuleNotFoundError错误

Python 运行脚本时发生ModuleNotFoundError错误,python,python-3.x,bash,Python,Python 3.x,Bash,我已经研究了很多以前被问过的问题,但我找不到解决问题的办法 我正在根目录的终端上运行python3folder1/script1.py命令 但是我得到了错误:没有名为“folder2”的模块。 我在文件夹中添加了_u; init _; py.py,但仍然找不到解决方案 我的项目目录如下所示: └── root ├── folder1 │ ├── script1.py │ └── folder2 ├── module1.py 模块1.p

我已经研究了很多以前被问过的问题,但我找不到解决问题的办法

我正在根目录的终端上运行python3folder1/script1.py命令 但是我得到了错误:没有名为“folder2”的模块。 我在文件夹中添加了_u; init _; py.py,但仍然找不到解决方案

我的项目目录如下所示:

└── root
    ├── folder1
    │   ├── script1.py
    │   
    └── folder2
        ├── module1.py

模块1.py:

def say_hello():
    print('hello')
scipt1.py:

from folder2 import module1

module1.say_hello()

带双下划线的init的正确用法

__init__ 
我在文件夹中添加了uinit uupy.py,但仍然找不到解决方案


编写init时只需一个。

通常,python需要安装python模块才能找到它们。一个附带规则是python将查看脚本的路径,以查看模块是否存在。将
script1.py
向下移动一个级别,确保您有一个
\uuuu init\uuuu.py
,它就会工作

└── root
    ├── script1.py
    │   
    └── folder2
        ├── __init__.py
        ├── module1.py
您还可以让
script1.py
将其祖父母目录插入
sys.path
。但是解决这个问题的最好方法是通过添加setup.py使包可以安装。一个极其原始的版本是

import setuptools

setuptools.setup(
    name="Foobar",
    packages=setuptools.find_packages(),
    scripts=["folder1/script1.py"]
)
您的目录可以是

└── root
    ├── setup.py
    ├── folder1
    │   ├── script1.py
    │   
    └── folder2
        ├── __init__.py
        ├── module1.py

现在,您可以执行
python setup.py develope
从开发目录运行脚本。或
python setup.py安装
(通常在您创建的venv中)使其成为标准安装。

请参阅此答案。我试过这个。它对我不起作用。我添加了空的init文件。但这不是解决办法。