Есть ли способ заставить Jython py_compile не записывать абсолютный путь к исходному файлу? - PullRequest
1 голос
/ 07 мая 2019

Я использую py_compile в Jython 2.5.3 для компиляции некоторых файлов Python в файлы $ py.class.

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

Есть ли способ заставить py_compile записывать относительные пути, а не абсолютные? Я понимаю, почему он должен быть там для обработки исключений, но мне не нужны ссылки на абсолютный путь, поскольку он дает утечку информации о том, где он находится на компьютере, который компилирует файл .py.


пример:

jython1.py:

import sys
import py_compile

if __name__ == '__main__':
    infile = sys.argv[1]
    py_compile.compile(infile)

jython2.py:

def doit(a,b):
    print a/b

doit(3,4)
doit(3,0)

, и я могу запустить это через

java -jar path/to/jython-standalone-2.5.3.jar jython1.py jython2.py

Полученный файл jython2 $ py.class содержит путь к jython2.py

1 Ответ

1 голос
/ 07 мая 2019

Упс, недостаточно внимательно прочитал документацию . Третий аргумент для py_compile.compile() (мой акцент):

py_compile.compile (file [, cfile [, dfile [, doraise]]])

Скомпилируйте исходный файл в байт-код и запишите кэш байт-кода файл. Исходный код загружается из файла с именем файла. Байт-код записывается в cfile, который по умолчанию равен file + 'c' ('o', если оптимизация включен в текущий переводчик). Если указан dfile, это используется в качестве имени исходного файла в сообщениях об ошибках вместо файла. Если doraise имеет значение true, PyCompileError возникает при возникновении ошибки встречается при компиляции файла. Если doraise имеет значение false (по умолчанию), строка ошибки записывается в sys.stderr, но исключение не возникает.

...