有什么方法可以让Jython py_compile不记录源文件的绝对路径?

时间:2019-05-07 19:31:03

标签: python jython

我在Jython 2.5.3中使用py_compile将一些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 个答案:

答案 0 :(得分:1)

糟糕,您对documentation的阅读不够充分。 py_compile.compile()还有第三个论点(我强调):

  

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

     

将源文件编译为字节码并写出字节码缓存   文件。源代码是从文件名文件加载的。字节码   写入cfile,默认为文件+'c'(如果优化则为'o'   在当前解释器中启用)。 如果指定了dfile,则为   用作错误消息中的源文件名而不是文件。   如果doraise为true,则在出现错误时引发PyCompileError   编译文件时遇到。如果doraise为假(默认设置),   将错误字符串写入sys.stderr,但不会引发异常。