为什么当我将python文件移动到ubuntu中的scipy.stats文件夹时它会消失?

时间:2013-04-18 02:08:20

标签: python

我下载了http://projects.scipy.org/scipy/attachment/ticket/846/mvncdf.py

我:sudo mv~ / Downloads / mvncdf.py /usr/lib/pyshared/python2.7/scipy/stats

它消失了

我也尝试直接保存到/usr/lib/pyshared/python2.7/scipy/stats,它仍然消失。

总的来说,我不知道如何移动它,以便我可以从python程序中调用它,如果我已经导入了scipy.stats,scipy.stats.kde等。这就是我真正想要解决的问题。

1 个答案:

答案 0 :(得分:1)

有几种方法可以在python中导入外部库。最简单的方法是从与文件相同的目录中启动程序或解释器,所以

$ mkdir new_program
$ mv ~/Downloads/mvncdf.py new_program/.
$ cd new_program
$ python
>>> import mvncdf

或者,正如@tcaswell所建议的那样,您可以为PYTHONPATH环境变量添加本地路径,

$ mkdir ~/python_scripts 
$ mv ~/Downloads/mvncdf.py python_scripts/.
$ PYTHONPATH=$PYTHONPATH:$HOME/python_scripts
$ export PYTHONPATH

最后两行可以放在~/.bashrc~/.bash_profile中,以便每次登录时都会设置变量。

更永久的方法是在sys.path中找到这样的本地用户“已安装”程序应该去的目录。按照惯例,这是您的分发的site-packages目录之一。如果你使用python版本2.7,这可能是:

$ sudo mv ~/Downloads/mvncdf.py /usr/lib/python2.7/site-packages/.

您可以从python shell

中查看sys.path中的目录
>>> import sys
>>> for i in sys.path:
...     print i
...

但是,不建议将自己的文件放在/usr/lib/python2.7/site-packages/之类的内容中,因为它们可能会在python更新期间被覆盖。最恰当的方式,以及最接近FHS的方式是在site-packages下创建/usr/local目录,例如,

$ sudo mkdir -p /usr/local/lib/python2.7/site-packages

然后编辑/usr/lib64/python2.7/site.py,找到PREFIXES变量,并将新目录添加到列表中,例如,

PREFIXES = [sys.prefix, sys.exec_prefix, '/usr/local']

Ubuntu可能已在sys.path中拥有此目录,因此请在创建和编辑site.py之前进行检查。当然,如果您必须修改site.py,那么在升级python时会遇到同样的问题,只需将文件放在/usr/lib下的目录中即可。