如何以编程方式替换PYTHONPATH

时间:2017-04-05 21:30:43

标签: python python-2.7 pyspark

有没有办法以编程方式替换PYTHONPATH? 我应该补充一点,我想用decode-submit

运行decode.py

我在某个路径上有以下目录结构:

decode.py
decode2.py
crfsuite/
    crfsuite.py
    _crfsuite.so
    libcqdb-0.12.so
    libcrfsuite-0.12.so

decode.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

1 个答案:

答案 0 :(得分:1)

PYTHONPATH env。变量内容被复制到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删除路径。