Завернутый скрипт Tcl перестает работать при перемещении

Я новичок в Tcl, и у меня есть сценарий, который завернут с помощью freewrapTCLSH.exe

Сначала, когда началось, программа жаловалась на то, что не найдет пакет

Я отредактировал строку, которую, похоже, «включил» ее в

lappend auto_path ../../lib/crc

Это отлично работает, и .exe начался без проблем. Но затем я переместил exe в другую папку, и он снова начал жаловаться. Я думал, что как только exe будет создано, все будет сделано. Но, похоже, это не очень хорошо справляется. Сначала весь путь к lib был жестко закодирован в скрипт, и тогда все работало нормально. Но поскольку мы не можем полагаться на exe, который всегда строится в той же папке, это должно было быть изменено.

Любые идеи о том, как обойти эту неприятную проблему?

1
nl ja de

2 ответы

../../lib/crc is interpreted using the current working directory each time a package is searched. Having this thing it your ::auto_path is almost always not what you want.

Я использую [файл dirname [info script]] , чтобы получить каталог текущего файла Tcl, добавленный относительный путь к некоторому lib/crc с file join , чтобы получить полное имя пути с нормальным кодом . Результатом нормализации файла file является то, что я добавляю к :: auto_path (или помню для будущего использования каким-либо другим способом):

lappend ::auto_path [file normalize [file join [file dirname [info script]] ../mylib]]

Это может быть очевидно, но все же: info script возвращает путь к файлу, являющемуся в настоящее время источником, а не как-то запоминающимся , когда файл, содержащий вызов для него , был источники . Если вы хотите получить текущее местоположение сценария, убедитесь, что это происходит в нужное время (например, сделайте это на верхнем уровне).

2
добавлено
Ahhh, спасибо. Это решило.
добавлено автор inquam, источник

Вы должны доставить требуемый пакет (и зависимости этого пакета) в ваш exe. обычно это связано только с копированием каталога необходимых пакетов в папку lib в ваших vfs.

1
добавлено