Старайтесь не экспортировать PYTHONPATH каждый раз, чтобы __init__.py работал - PullRequest
0 голосов
/ 21 января 2019
`-- MyDir
|-- FolderA
|   |-- __init__.py
|   |-- ScriptA.py
`-- FolderB
    |-- __init__.py
    |-- ScriptB.py

Выше приведен пример моей текущей структуры. И в FolderA, и в FolderB есть .from FolderX import * в __init__.py, X - это A или B.

Я хочу запустить ScriptB.py, который сначала импортирует FolderA: from FolderA import *. Однако выполнение python ScriptB.py в отчетах FolderB ModuleNotFoundError: No module named 'FolderA';

Мой текущий способ получить эту работу - набирать export PYTHONPATH=/path/to/MyDir:$PYTHONPATH каждый раз, когда я запускаю среду conda. Я хотел бы спросить причину этого и как можно избежать этого.

РЕДАКТИРОВАТЬ : кажется, что я должен был использовать Folder и Script, чтобы сохранить простоту.

Ответы [ 3 ]

0 голосов
/ 21 января 2019

Я вижу несколько способов справиться с этим.Во-первых, я бы рассмотрел возможность сделать их единой упаковкой.Но это может быть быстро отброшено, если они явно не являются.

Если они действительно являются отдельными пакетами, у вас все еще есть варианты.Если кто-то готов к выпуску, вы можете установить его в свою среду Python через pip install, используя скрипт setup.py и все связанные с ним вещи.Для получения дополнительной информации см. Учебник по Python для упаковки .

Наконец, и, скорее всего, вы все еще планируете модифицировать содержимое.В этом случае pip имеет очень удобную возможность установить пакет в виде символической ссылки.Таким образом, пакет читается из каталога, в котором вы разрабатываете.Это делается путем выполнения pip install -e . из каталога, в котором существует setup.py.Вы можете иметь общий сценарий установки для «обоих» пакетов, например, setuptools.find_packages.Или вы можете немного изменить структуру папок, чтобы иметь разные настройки для каждого пакета.Теперь они импортируются как обычные пакеты Python.

0 голосов
/ 21 января 2019

Используйте conda Develop

https://conda.io/docs/commands/build/conda-develop.html

Это позволяет вам добавить каталог в файл conda.pth в пакетах сайта выбранной вами среды, который будет автоматически добавлен в ваш pythonpath.

conda develop ~/path/to/work_in_progress/code/ -n environment_name
0 голосов
/ 21 января 2019

Если PackageA и PacakgeB на одном уровне каталога, вы можете просто добавить __init__.py в этот каталог:

App
----__init__.py
----PackageA
---- ...
--------__init__.py
----PackageB
---- ...
--------__init__.py

В противном случае, если эти пакеты разрабатываются независимо, вы можете установить ихкак глобальные пакеты.

...