Python путь при сборке / использовании модулей - PullRequest
0 голосов
/ 20 февраля 2020

(Использование python ver 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, она выдает ошибку «Нет такого файла в каталоге». Я в полном недоумении от того, что делать. Также у меня проблемы с импортом из папок-братьев и сестер, но я до сих пор работал над этим.

Структура файла:

Filestructure

1 Ответ

1 голос
/ 20 февраля 2020

Хорошо, это не будет работать, так как Плагины находятся в отдельном пакете, не связанном с пакетом NeuralNetwork.

Каждая ваша папка создает пакет, если в ней есть файл __init __.py, что означает, что затем вы можете импортировать этот пакет из python.

Например,

Programs

|----- Package1
            file1.py
            __ init __.py
|------Package2
            file2.py
            __init __.py

В этой настройке есть два независимых пакета, которые не знают друг друга. Поэтому вы не можете импортировать из Package1 из Package2 и наоборот. Однако, если вы измените структуру, чтобы она была такой, то есть превращение программ в пакет путем добавления в __ init __. Py

Programs

|----- Package1
            file1.py
            __ init __.py
|------Package2
            file2.py
            __init __.py
__init __.py

, так что теперь программы также являются пакетом, а Package1 и Package2 находятся внутри тот же пакет, затем из file1.py вы можете сделать следующее

import Programs.Package2.file2

Недостатком этого является то, что при импорте каждый файл будет содержать ссылки на пакеты вокруг него. То есть пакеты действительно зависят друг от друга и не могут работать, если не присутствуют все пакеты.

Однако, если пакеты действительно независимы, еще один способ - добавить пакет, который вы хотите использовать в вашей системе. Путь, выполнив следующее

import sys
sys.path.append("/path/to/my/package")

Я пробовал это, и у меня есть следующая структура файла

Structure of files

mod1.py имеет следующий код

from program.module2.mod2 import hello

hello()

mod2.py имеет следующий код

def hello():
    print("hello")

main.py имеет следующий код

from program.module1 import mod1

из командной строки, I go в одну папку выше программы, и я набираю следующее

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
...