有没有办法以编程方式替换 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/

10-12 21:57