Хорошо, поэтому я действительно хочу получить это правильно, потому что я постоянно сталкиваюсь с этим при создании больших пакетов py2app/py2exe. Поэтому у меня есть пакет, содержащий множество модулей/пакетов, которые также могут быть в пакетах сайтов/по умолчанию для пользователей (если у пользователя есть дистрибутив python), но я хочу, чтобы мои распределенные пакеты вступили в силу перед ними при запуске из моего дистрибутива,
Теперь из того, что я прочитал здесь PYTHONPATH должен быть первым, что добавлено в sys.path после но из того, что я тестировал на своей машине, это не так, и все папки, определенные в $site-packages$/easy-install.pth
, имеют приоритет над этим.
Так может кто-то, пожалуйста, дайте мне более подробное объяснение об этом порядке импорта.//Помогите мне найти способ установить переменные среды таким образом, чтобы распространенные мной пакеты имели приоритет над установленными по умолчанию. Пока моя попытка, например, на Mac OS OS py2app, в моей точке входа script:
os.environ['PYTHONPATH'] = DATA_PATH + ':'
os.environ['PYTHONPATH'] = os.environ['PYTHONPATH'] + os.path.join(DATA_PATH
, 'lib') + ':'
os.environ['PYTHONPATH'] = os.environ['PYTHONPATH'] + os.path.join(
DATA_PATH, 'lib', 'python2.7', 'site-packages') + ':'
os.environ['PYTHONPATH'] = os.environ['PYTHONPATH'] + os.path.join(
DATA_PATH, 'lib', 'python2.7', 'site-packages.zip')
Это в основном структура пакета, созданного py2app. Тогда я просто:
SERVER = subprocess.Popen([PYTHON_EXE_PATH, '-m', 'bin.rpserver'
, cfg.RPC_SERVER_IP, cfg.RPC_SERVER_PORT],
shell=False, stdin=IN_FILE, stdout=OUT_FILE,
stderr=ERR_FILE)
Здесь PYTHON_EXE_PATH - это путь к exe python, который добавляется py2app в пакет. Теперь это отлично работает на машине, на которой нет установленного python. Однако, когда дистрибутив python уже присутствует, их пакеты-сайты имеют приоритет.