Python: ссылка на другой проект

Я хочу иметь возможность запускать мой проект Python из командной строки. Я ссылаюсь на другие проекты, поэтому мне нужно иметь возможность запускать модули в других папках.

Один из способов сделать эту работу - изменить переменную среды Pythonpath, но я думаю, что это злоупотребление. Другой способ - скопировать все нужные файлы в один каталог и запустить Python. Есть ли лучший способ сделать это?

Примечание: я на самом деле программирую в Eclipse, но я хочу иметь возможность запускать программу удаленно.

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

5 ответов

Решение

Если вы импортируете sys, он содержит список каталогов в PYTHONPATH как sys.path

Добавление каталогов в этот список (sys.path.append("my/path")) позволяет импортировать из этих мест в текущем модуле в обычном режиме без изменения глобальных настроек в вашей системе.

Посмотрите на инструменты, такие как

  1. virtualenv, для настройки виртуального питона, в котором вы можете устанавливать свои модули, не получая их глобально. http://pypi.python.org/pypi/virtualenv

  2. Setuptools, который позволяет вам указать (и автоматически установить) зависимости для ваших модулей. http://pypi.python.org/pypi/setuptools (Если у вас есть проблемы с setuptools, взгляните на Distribute, поддерживаемый форк. http://pypi.python.org/pypi/distribute)

  3. Buildout, который позволяет вам развернуть полную прикладную среду, включая стороннее программное обеспечение, такое как MySQL или что-либо еще. http://pypi.python.org/pypi/zc.buildout/

Во-первых, я хочу убедиться, что модуль, который я хочу включить, не был установлен глобально. Затем я добавляю символическую ссылку в каталог includee:

# With pwd == module to which I want to add functionality.
ln -s /path/to/some_other_module_to_include .

и тогда я могу сделать стандартный импорт. Это позволяет использовать несколько версий и т.д. Это не требует изменения каких-либо глобальных настроек, и вам не нужно менять программный код, если вы работаете на разных машинах (просто измените символическую ссылку).

Я только что понял, что на самом деле решил эту проблему раньше. Вот подход, который я использовал - гораздо более сложный, чем в mavnn, но я также решал проблему запуска программы Python2.x из Python 3.0

import os
import subprocess
env=os.environ.copy()
env['PYTHONPATH']=my_libraries
kwargs={"stdin":subprocess.PIPE, "env":env}
subprocess.Popen(["python","-u",program_path],**kwargs)

Если под "запуском модулей" вы подразумеваете их импорт, вас может заинтересовать вопрос, который я задавал некоторое время назад.

Другие вопросы по тегам