我在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的路径
答案 0 :(得分:1)
糟糕,您对documentation的阅读不够充分。 py_compile.compile()
还有第三个论点(我强调):
py_compile.compile(file [,cfile [,dfile [,doraise]]])
将源文件编译为字节码并写出字节码缓存 文件。源代码是从文件名文件加载的。字节码 写入cfile,默认为文件+'c'(如果优化则为'o' 在当前解释器中启用)。 如果指定了dfile,则为 用作错误消息中的源文件名而不是文件。 如果doraise为true,则在出现错误时引发PyCompileError 编译文件时遇到。如果doraise为假(默认设置), 将错误字符串写入sys.stderr,但不会引发异常。