2016-08-01 6 views
0

платформы: Windows 7
Python: 2.7.3добавить новый путь к PTYHONPATH и использовать его для программы, которая делает это с помощью NSIS

StrCpy $NETWORK_PATH "\\someserver\network\path\here" 
DetailPrint "$\n" 
DetailPrint "Setting up paths required" 
Push "SETX PYTHONPATH $NETWORK_PATH;$NETWORK_PATH\lib" 
Call Execute 
Push '"C:\Python27\python.exe" setup.py deploy' 
Call Execute 

Function Execute 
    Exch $0 
    # execution of the command and return success or failure 
FunctionEnd 

Это выше скомпилирован как NSIS инсталлятор и работать на нескольких машинах.

Проблема "C:\Python27\python.exe" setup.py deploy зависит от того, что $ NETWORK_PATH для успешного выполнения.

В первый раз, когда мы запускаем его, $ NETWORK_PATH добавляется к переменной окружения PYTHONPATH, но "C:\Python27\python.exe" setup.py deploy не работает, поскольку новый PYTHONPATH будет эффективен только в новой командной строке или в следующем запуске.

Есть ли способ сделать добавленный PYTHONPATH эффективным в том же самом запуске?

В настоящее время мы запускаем его дважды - один раз для установки PYTHONPATH и принятия отказа, второй раз он успешно работает.

Другой альтернативный подход, который мы пробовали, - мы сделали 2 исполняемых файла, один для установки PYTHONPATH, а другой для запуска Python Script. Затем мы запускаем оба из них в пакетном скрипте.

Но мое предпочтение заключается в достижении всего этого в одном файле и в одном запуске.

+0

вы пробовали импорт SYS, и изменить sys.path? –

+0

@KennyOstrom у нас первоначально было то, что в скрипте python, использующем sys.path, этот способ решения проблем с серверами имел проблемы с DNS. Поэтому мы создали установщиков, где мы можем быстро изменить сетевой путь к IP-адресам и подготовить установщик. Редактировать скрипт python на всех машинах стал накладной задачей. :( –

+0

Я не понимаю разницы. Единственное изменение в системе - это установка NETWORK_PATH в env на разных системах, и вы уже это делаете. –

ответ

1

Вы можете обновить среду инсталляторов, он будет наследоваться дочерними процессами:

System::Call 'Kernel32::SetEnvironmentVariable(t "PYTHONPATH", t "$NETWORK_PATH;$NETWORK_PATH\lib")i.r0' ; $0 will be != "0" on success 
Push '"C:\Python27\python.exe" setup.py deploy' 
Call Execute 
+0

Благодарим вас, попробуйте и опубликуйте обновление –