在实战中我们往往需要导入自己写的一个.py文件,而且不是在当前目录下的文件,是不是可以作为模块直接 import 过来呢?并不是,我们必须让 Python 解释器能够找到你写的模块。主要有以下两种方法。
1. sys.path.append( )告知解释器
假设我们自己的python文件名为 inferSingleDocVec.py,那么这个文件可以作为一个模块被引入,现在Python 解释器并不知道我写了这么一个文件,所以我得先告诉它。
>>> import sys
>>> sys.path.append("~/data/word2vec/doc2vec")
>>> import inferSingleDocVec
用这种方式就是告诉 Python 解释器,我写的那个文件在哪里。在这个告诉方法中,也用了一个模块 import sys,不过由于 sys 模块是 Python 被安装的时候就有的,所以不用特别告诉,Python 解释器就知道它在哪里了。代码可以放入python文件开头部分,也可以在交互情况下使用,要注意的是,在交互模式下,如果关闭了,然后再开启,必须重新告知。
2. 放入sys.path路径下
为了让我们自己写的模块能够被 Python 解释器知道,需要用sys.path.append("~/data/word2vec/doc2vec/inferSingleDocVec.py")。其实,在 Python 中,所有模块都被加入到了 sys.path 里面了。用下面的方法可以看到模块所在位置:
>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
["",
"/usr/local/python27/lib/python2.7/site-packages/distribute-0.7.3-py2.7.egg",
"/usr/local/python27/lib/python2.7/site-packages/setuptools-21.0.0-py2.7.egg",
"/usr/local/python27/lib/python2.7/site-packages/Pyro4-4.43-py2.7.egg",
"/usr/local/python27/lib/python2.7/site-packages/serpent-1.12-py2.7.egg",
"/usr/local/python27/lib/python27.zip",
"/usr/local/python27/lib/python2.7",
"/usr/local/python27/lib/python2.7/plat-linux2",
"/usr/local/python27/lib/python2.7/lib-tk",
"/usr/local/python27/lib/python2.7/lib-old",
"/usr/local/python27/lib/python2.7/lib-dynload",
"/usr/local/python27/lib/python2.7/site-packages"]
凡在上面列表所包括位置内的 .py 文件都可以作为模块引入。所以另外一种简单的方式就是将文件复制到该目录下。
>>> cp /data/word2vec/doc2vec/inferSingleDocVec.py /usr/local/python27/lib/python2.7/site-packages/
一般来说方法一就够用了,这次是因为要在c中调用python模块,因此用了方法二,方法二需要root权限。