-
Notifications
You must be signed in to change notification settings - Fork 12
python 将自己写的py文件作为模块导入
Shuang edited this page Jan 9, 2018
·
1 revision
在实战中我们往往需要导入自己写的一个.py文件,而且不是在当前目录下的文件,是不是可以作为模块直接 import 过来呢?并不是,我们必须让 Python 解释器能够找到你写的模块。主要有以下两种方法。
假设我们自己的python文件名为 inferSingleDocVec.py,那么这个文件可以作为一个模块被引入,现在Python 解释器并不知道我写了这么一个文件,所以我得先告诉它。
>>> import sys >>> sys.path.append("~/data/word2vec/doc2vec") >>> import inferSingleDocVec
用这种方式就是告诉 Python 解释器,我写的那个文件在哪里。在这个告诉方法中,也用了一个模块 import sys,不过由于 sys 模块是 Python 被安装的时候就有的,所以不用特别告诉,Python 解释器就知道它在哪里了。代码可以放入python文件开头部分,也可以在交互情况下使用,要注意的是,在交互模式下,如果关闭了,然后再开启,必须重新告知。
为了让我们自己写的模块能够被 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权限。
参考链接: http://wiki.jikexueyuan.com/project/start-learning-python/219.html
[[TOC]]