Переменная среды PYTHONPATH …, как я делаю каждый подкаталог впоследствии?

Я могу понять, пытаетесь ли Вы вывести это в крон или что-то, но почему не просто ftp в сервер с Вашим нормальным клиентом и mget *? Это могло бы быть более быстрым путем к успеху.

9
задан 1 November 2009 в 01:37
3 ответа

Это не то, как PYTHONPATH работает; PYTHONPATH рассматривает свой путь поиска по-другому по сравнению с ПУТЕМ оболочки. Скажем, я делаю это:

$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py

Это будет работать в Python (sys.path будет включать текущий каталог):

$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6

Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)
>>> import a, b   # Works
>>> quit()

Однако подкаталоги рассматривают как пакеты когда __init__.py присутствует в каталоге и проигнорированы PYTHONPATH иначе:

$ mkdir /home/jsmith/python/pkg
$ cd /home/jsmith/python/pkg
$ touch __init__.py c.py d.py
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6

Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51)
>>> import a, b   # Works
>>> import c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named c

Для достигания чего-то в том подкаталоге это работало бы:

>>> from pkg import c   # Works
>>> import pkg.c        # Works

Для прокрутки решения, где каждый подкаталог в PYTHONPATH добавляется необходимо явно добавить каждую папку к PYTHONPATH или sys.path программно. Это поведение является намеренным, и не ведет себя ничто как ПУТЬ оболочки. Оказанный поддержка интерпретатора пакетам в этом отношении, конечно, существует лучший способ выполнить то, что Вы после?

14
ответ дан 2 December 2019 в 22:26
  • 1
    Человек, я желаю, чтобы каждый сайт проверил бы Ваши другие учетные записи прежде, чем отклонить Вас отправляющий полномочия. Это сосет запуск с представителя, особенно с вещей как предел с одним URL... (У меня было больше ссылок для Вас, OP), –  Jed Smith 1 November 2009 в 03:08

Это не то, как переменные ПУТИ среды работают - Вы даете ему каталог верхнего уровня, и это до приложения для рекурсивного вызова дерева каталогов, если это должно.

1
ответ дан 2 December 2019 в 22:26
  • 1
    Так, если у меня есть файл Python под/home/$USER/myfile.py, я могу импортировать это? –  Alex 1 November 2009 в 01:42
  • 2
    Несомненно, почему couldn' t Вы? –  EEAA 1 November 2009 в 01:45

Конечно, можно добавить подкаталоги каталога в переменную PYTHONPATH с помощью оболочки. В настоящее время я использую что-то похожее на следующее в моем .bashrc:

export PYTHONPATH="$(find $HOME/ -maxdepth 2 -type d | sed '/\/\./d' | tr '\n' ':' | sed 's/:$//')"

Это будет включать все подкаталоги вашей пользовательской папки на глубину 2 в дереве. Команда find находит каталоги ('-type d'), а следующие команды sed и tr форматируют вывод обычным способом переменных PATH.

Если не указывать '-maxdepth 2', будут включены все подкаталоги вашей домашней папки. , что, вероятно, довольно много для поиска. Возможно, это следует делать только в вашем каталоге $ HOME / repository / python-stuff.

1
ответ дан 2 December 2019 в 22:26

Теги

Похожие вопросы