@@ -16,8 +16,9 @@ SETLOCAL EnableDelayedExpansion
1616:: User-configurable settings
1717:: ---------------------------------------------------------------------------
1818:: Set this to the folder containing Visum's bundled Python interpreter.
19- :: Example: C:\Program Files\PTV Vision\PTV Visum 2026\Exe\Junction_Preview\Python
20- SET " VISUM_PYTHON_DIR = C:\Program Files\PTV Vision\PTV Visum 2026\Exe\Junction_Preview\Python"
19+ :: IMPORTANT: Do not include a trailing backslash at the end of this path.
20+ :: Example: C:\Program Files\PTV Vision\PTV Visum 2026\Exe\Python
21+ SET " VISUM_PYTHON_DIR = C:\Program Files\PTV Vision\PTV Visum 2026\Exe\Python"
2122
2223:: Set to Y to clone and install sandag_parking (oregon_metro branch), N to skip
2324:: (optional dependency, only needed if you want to regenerate parking cost data)
@@ -158,20 +159,79 @@ ECHO.
158159:: ============================================================================
159160ECHO [3/5] Setting up Visum Python packages...
160161
161- IF NOT EXIST " %VISUM_PYTHON_DIR% \python.exe" (
162+ SET " VISUM_PACKAGE_STATUS = not checked"
163+ SET " VISUM_PYTHON_EXE = %VISUM_PYTHON_DIR% \python.exe"
164+
165+ IF NOT EXIST " %VISUM_PYTHON_EXE% " (
162166 ECHO WARNING: Visum Python not found at:
163167 ECHO %VISUM_PYTHON_DIR%
164168 ECHO Please edit VISUM_PYTHON_DIR in this script to point to your Visum 2026 Python folder.
165- ECHO Skipping Visum package installation.
166- ) ELSE (
167- ECHO Installing tables, openmatrix, pyyaml into Visum Python...
168- " %VISUM_PYTHON_DIR% \python.exe" -m pip install tables openmatrix pyyaml --quiet
169+ SET " VISUM_PACKAGE_STATUS = skipped (Visum Python not found)"
170+ GOTO :VISUM_DONE
171+ )
172+
173+ :: Resolve site-packages path via temp file (handles spaces in paths)
174+ SET " VISUM_SITE_PACKAGES = "
175+ SET " VISUM_SITE_FILE = %TEMP% \simor_visum_site_packages.txt"
176+ " %VISUM_PYTHON_EXE% " -c " import sysconfig; print(sysconfig.get_paths().get('purelib',''))" > " %VISUM_SITE_FILE% " 2 > nul
177+ IF EXIST " %VISUM_SITE_FILE% " (
178+ SET /P VISUM_SITE_PACKAGES = < " %VISUM_SITE_FILE% "
179+ DEL /Q " %VISUM_SITE_FILE% " > nul 2 >& 1
180+ )
181+
182+ IF NOT DEFINED VISUM_SITE_PACKAGES (
183+ ECHO WARNING: Could not resolve Visum site-packages path.
184+ SET " VISUM_PACKAGE_STATUS = skipped (could not resolve site-packages)"
185+ GOTO :VISUM_DONE
186+ )
187+
188+ ECHO Resolved Visum site-packages path:
189+ ECHO !VISUM_SITE_PACKAGES!
190+
191+ :: Check if packages are already importable
192+ " %VISUM_PYTHON_EXE% " -c " import tables,openmatrix,yaml" > nul 2 >& 1
193+ IF !ERRORLEVEL! EQU 0 (
194+ ECHO Required Visum packages are already available. Skipping install.
195+ SET " VISUM_PACKAGE_STATUS = already available"
196+ GOTO :VISUM_DONE
197+ )
198+
199+ :: Ensure site-packages directory exists
200+ IF NOT EXIST " !VISUM_SITE_PACKAGES! " (
201+ MKDIR " !VISUM_SITE_PACKAGES! " > nul 2 >& 1
169202 IF !ERRORLEVEL! NEQ 0 (
170- ECHO WARNING: Failed to install one or more Visum Python packages.
171- ) ELSE (
172- ECHO Visum packages installed successfully.
203+ ECHO WARNING: Cannot create directory:
204+ ECHO !VISUM_SITE_PACKAGES!
205+ ECHO Re-run as Administrator or ask IT to install these packages.
206+ SET " VISUM_PACKAGE_STATUS = missing packages, no write access"
207+ GOTO :VISUM_DONE
173208 )
174209)
210+
211+ :: Test write access
212+ > " !VISUM_SITE_PACKAGES! \.__simor_write_test__.tmp" ECHO write-test 2 > nul
213+ IF NOT EXIST " !VISUM_SITE_PACKAGES! \.__simor_write_test__.tmp" (
214+ ECHO WARNING: Cannot write to:
215+ ECHO !VISUM_SITE_PACKAGES!
216+ ECHO Re-run as Administrator or ask IT to install these packages.
217+ SET " VISUM_PACKAGE_STATUS = missing packages, no write access"
218+ GOTO :VISUM_DONE
219+ )
220+ DEL /Q " !VISUM_SITE_PACKAGES! \.__simor_write_test__.tmp" > nul 2 >& 1
221+
222+ :: Install packages
223+ ECHO Installing tables, openmatrix, pyyaml into:
224+ ECHO !VISUM_SITE_PACKAGES!
225+ " %VISUM_PYTHON_EXE% " -m pip install --upgrade tables openmatrix pyyaml --target " !VISUM_SITE_PACKAGES! "
226+ IF !ERRORLEVEL! NEQ 0 (
227+ ECHO WARNING: Failed to install one or more Visum Python packages.
228+ SET " VISUM_PACKAGE_STATUS = install failed"
229+ ) ELSE (
230+ ECHO Visum packages installed successfully.
231+ SET " VISUM_PACKAGE_STATUS = installed/updated"
232+ )
233+
234+ :VISUM_DONE
175235ECHO .
176236
177237:: ============================================================================
@@ -280,6 +340,7 @@ ECHO.
280340ECHO PYTHON_ACTIVITYSIM = %PYTHON_ACTIVITYSIM%
281341ECHO PYTHON_MAZ_SKIMMING = %PYTHON_MAZ_SKIMMING%
282342ECHO PYTHON_VISUM = %PYTHON_VISUM%
343+ ECHO VISUM_PACKAGES = %VISUM_PACKAGE_STATUS%
283344IF DEFINED PYTHON_PARKING (
284345 ECHO PYTHON_PARKING = !PYTHON_PARKING!
285346) ELSE (
@@ -296,6 +357,7 @@ ENDLOCAL & (
296357 SET " PYTHON_MAZ_SKIMMING = %PYTHON_MAZ_SKIMMING% "
297358 SET " PYTHON_VISUM = %PYTHON_VISUM% "
298359 SET " PYTHON_PARKING = %PYTHON_PARKING% "
360+ SET " VISUM_PACKAGE_STATUS = %VISUM_PACKAGE_STATUS% "
299361 SET " EXT_DIR = %EXT_DIR% "
300362 SET " BASE_DIR = %BASE_DIR% "
301363 SET " PATH = %PATH% "
0 commit comments