有没有办法以编程方式替换 PYTHONPATH ?
我应该补充一点,我想用 spark-submit 运行 decode.py
我在某个路径有以下目录结构:
decode.py
decode2.py
crfsuite/
crfsuite.py
_crfsuite.so
libcqdb-0.12.so
libcrfsuite-0.12.so
解码.py:
import crfsuite
if __name__ == '__main__':
tagger = crfsuite.Tagger()
以下命令有效:
PYTHONPATH=./crfsuite LD_LIBRARY_PATH=./crfsuite python decode.py
或者,如果我将 crfsuite/crfsuite.py 和 crfsuite/_crfsuite.so 复制到我的本地目录(decode.py 存在的地方),那么以下内容也有效:
LD_LIBRARY_PATH=./crfsuite python decode.py
有没有办法以编程方式添加 .py 和 .so 文件?我想出了 decode2.py:
from ctypes import *
import imp
if __name__ == '__main__':
cdll.LoadLibrary('<some-path>/crfsuite/_crfsuite.so')
imp.load_source('crfsuite', '<some-path>/crfsuite/crfsuite.py')
tagger = crfsuite.Tagger()
执行:
LD_LIBRARY_PATH=./crfsuite python decode2.py
Traceback (most recent call last):
File "decode2.py", line 6, in <module>
imp.load_source('crfsuite', '<some-path>/crfsuite/crfsuite.py')
File "<some-path>/crfsuite/crfsuite.py", line 17, in <module>
_crfsuite = swig_import_helper()
File "<some-path>/crfsuite/crfsuite.py", line 16, in swig_import_helper
return importlib.import_module('_crfsuite')
File "sw/anaconda2/lib/python2.7/importli/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named _crfsuite
最佳答案
PYTHONPATH
环境。变量内容被复制到 sys.path
模块中,所以在导入之前你可以添加一些这样的路径,例如:
import sys
sys.path.append("/path/to/your/module")
# your_module.py will now be found in /path/to/your/module
import your_module
请注意,如果
sys.path.remove
覆盖了某些系统库并且您不希望它覆盖,您也可以使用 PYTHONPATH
删除路径。关于python - 如何以编程方式替换 PYTHONPATH,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43241981/