Python импорт разных результатов из разных файлов - PullRequest
3 голосов
/ 13 января 2020

У меня есть 2 идентичные файлы: a.py и b.py.

, они оба содержат строку

from mypackage.utils import common

I также есть пакет:

mypackage/  
    __init__.py
    mymodule.py
    utils/ 
        __init__.py
        common.py
        myutils1.py
        b.py
    data_classes/ 
        __init__.py
        command_file.py
        myclass.py

Я предварительно делаю pip install mypackage

Затем я запускаю: python a.py, который следует

, а затем я запускаю python b.py ( обратите внимание, что b.py - это файл в mypackage)

b.py не работает с no module named utils

Есть идеи?

(примечание: я довольно нов к stackoverflow, это на самом деле не относится к Python импорту модулей не удается , хотя это как-то дополнительный вопрос, поэтому, если я делаю что-то не так, задавая новый вопрос, пожалуйста, дайте мне знать:)


edit:

Я устанавливаю mypackage (и, в частности, файл b внутри mypackage) в:

$ HOME \ github \ mypackage \ mypackage \ utils \ b. py

Я копирую b.py в a.py в: $ HOME \ github \ mypackage, это работает

Я копирую b.py в a.py в: $ HOME \ github \ this didn не работает

, так что это несколько объясняет это ... хотя h Я до сих пор не знаю, как это исправить!


edit: я отредактировал setup.py из следующей строки:

packages=['mypackage'],

в

packages=['mypackage','mypackage.data_classes','mypackage.utils']

похоже, это решает мою проблему: теперь все работает.

есть ли веская причина, почему я не должен этого делать?

Ответы [ 3 ]

1 голос
/ 13 января 2020

Я нашел пару решений для этого:

import common

или

import sys
sys.path.append("..\\..") # relative path to mypackage, check the slash if you're on linux
from mypackage.utils import common

некоторые вопросы:

почему вы двигаетесь b.py?

вы установили свой пакет?

1 голос
/ 13 января 2020

Проблема в том, что Python не знает, где найти вашу посылку. В первом объяснении он смотрит на текущий каталог и может понять, что это модуль, благодаря вашему файлу __init__.py. Так что он может искать ваши утилиты.

Во втором примере в текущем каталоге нет файла __init__.py, поэтому Python не знает, где искать модули.

Переменная PYTHONPATH указывает Python каталоги / модули для поиска доступных методов / пакетов.

Так что в вашем случае вы можете добавить свой текущий каталог в PYTHONPATH как export PYTHONPATH=$(pwd), находясь в «$ HOME \ github \», это должно помочь решить вашу проблему.

PS: OP хочет использовать установленный пакет вместо локального модуля. Это решение применимо, когда ваши локальные модули не видны для интерпретатора Python. Для более подробной информации, проверьте комментарии ниже.

0 голосов
/ 13 января 2020

Я отредактировал setup.py со следующей строки:

packages=['mypackage'],

до

packages=['mypackage','mypackage.data_classes','mypackage.utils']

это, похоже, решает мою проблему : теперь все работает.

есть ли веская причина, почему я не должен этого делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...