构建/使用模块时的Python路径

构建/使用模块时的Python路径,python,python-import,pythonpath,Python,Python Import,Pythonpath,(使用python 3.8版) 在我制作的一个模块中,我有一个函数: #Auxillary function that returns True if plugin type is valid, else raise error def checkTypeValid(pluginType): with open('PluginTypes.csv') as validTypes: reader = csv.reader(validTypes) for val

(使用python 3.8版)

在我制作的一个模块中,我有一个函数:

#Auxillary function that returns True if plugin type is valid, else raise error
def checkTypeValid(pluginType):
    with open('PluginTypes.csv') as validTypes:
        reader = csv.reader(validTypes)
        for validType in reader:
            if validType[0] == pluginType:
                return(True)
        raise ValueError('Plugin Type %s does not exist' % pluginType)
当我运行它时,它运行良好

但是,当我从Neuron.py使用:
from Plugins import PluginManager
调用此函数时,它会给出错误“目录中没有这样的文件”。我完全不知道该怎么办。从同级文件夹导入时也遇到问题,但到目前为止我一直在解决这个问题

文件结构:


由于插件位于与NeuralNetwork软件包无关的单独软件包中,因此无法正常工作

如果您拥有的每个文件夹中都有一个_init _; py.py文件,那么它将生成一个包,这意味着您可以从python导入该包

比如说

Programs

|----- Package1
            file1.py
            __ init __.py
|------Package2
            file2.py
            __init __.py
在此设置中,有两个相互不了解的独立软件包。因此,不能从Package1导入Package2,反之亦然。但是,如果您将结构更改为这样,那就是通过添加_uu _; init _u; py.py将程序制作成一个包

Programs

|----- Package1
            file1.py
            __ init __.py
|------Package2
            file2.py
            __init __.py
__init __.py
现在程序也是一个包,包1和包2都在同一个包中,那么从file1.py可以执行以下操作

import Programs.Package2.file2
import sys
sys.path.append("/path/to/my/package")
PS C:\temp\example> ls


    Directory: C:\temp\example

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        21/02/2020    15:10                .vs
d-----        21/02/2020    15:10                program


PS C:\temp\example> python -m program.main
hello
这样做的缺点是,导入时,每个文件都会包含对其周围包的引用。也就是说,这些包相互依赖,除非所有包都存在,否则无法工作

但是,如果包是真正独立的,另一种方法是通过执行以下操作在sys.path中添加要使用的包

import Programs.Package2.file2
import sys
sys.path.append("/path/to/my/package")
PS C:\temp\example> ls


    Directory: C:\temp\example

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        21/02/2020    15:10                .vs
d-----        21/02/2020    15:10                program


PS C:\temp\example> python -m program.main
hello
我已经试过了,我有下面的文件结构

mod1.py具有以下代码

from program.module2.mod2 import hello

hello()
def hello():
    print("hello")
from program.module1 import mod1
mod2.py具有以下代码

from program.module2.mod2 import hello

hello()
def hello():
    print("hello")
from program.module1 import mod1
main.py具有以下代码

from program.module2.mod2 import hello

hello()
def hello():
    print("hello")
from program.module1 import mod1
在命令行中,我进入程序上方的一个文件夹,输入以下内容

import Programs.Package2.file2
import sys
sys.path.append("/path/to/my/package")
PS C:\temp\example> ls


    Directory: C:\temp\example

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        21/02/2020    15:10                .vs
d-----        21/02/2020    15:10                program


PS C:\temp\example> python -m program.main
hello

我按照你的建议为每个文件夹添加了一个init.py文件,但是我仍然得到相同的错误,它表明没有任何模块名为我试图导入的任何模块。我是不是遗漏了什么?如果有帮助的话,我正在使用Spyder 4作为我的IDE并运行python 3.8。我不熟悉Spyder 4,我猜它可能正在运行一个单独的文件,比如Neuron.py,IDE应该运行的是Main.py。您还可以在命令行上尝试使用python,在Main.py所在的文件夹上启动它