2013-11-22 36 views
0

我是python的新手。通过阅读tutorial,我准备将一些共享代码放在一个盒子上。余检查的路径作为这样无法从定制包中导入共享的Python代码

>>> import sys 
>>> print sys.path 

在那里我看到/usr/lib/python2.6/site-packages。在这个目录中有一个目录yum,并在那里有一个文件yumRepo.py。回到解释,我可以运行

>>> from yum import yumRepo 

但是,如果我创建像这样一个自定义封装/模块(注意,所有的其他文件的所有者是root,因此须藤这里)

sudo mkdir /usr/lib/python2.6/site-packages/custom 
sudo touch /usr/lib/python2.6/site-packages/custom/custom.py 

custom.py

def testfunc(): 
    print('hello from custom module!') 

我不能导入它:

>>> from custom import custom 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named hnav 

权限看起来大致相同百胜包,除此之外,我没有_ 初始化 _.py脚本,但我真的需要吗?我如何从这个共享位置导入代码?

回答

1

是的,您需要在/usr/lib/python2.6/site-packages/custom中使用__init__.py文件,以使其成为Python包。这是记录在这里:http://docs.python.org/2.7/tutorial/modules.html#packages

__init__.py文件都需要使Python视该 目录为一个包

另外,假如你自己不必在全系统site-packages目录中,您可以将它们放在您的PYTHONPATH环境变量中引用的任何目录中。

+0

谢谢,我一定已经看到了。 – quickshiftin

1

我发现python setup.py机制并不总是放置你的当前python安装将在以后找到它们的模块/包。举例来说,如果你碰巧有模块/包源保存在/usr/local/whatever,并/usr/local/lib/python/etc Python的sys.path的项目,setup.py可能反正放在/usr/local/lib/python/etc新安装的文件。您可以通过指定一个--prefix选项,如避免这种情况:

sudo python setup.py install --prefix /usr 

而且,你必须检查的权限,新安装的文件和目录的,特别是如果你使用sudo命令。通过为新安装的模块设置适当的权限,简单解决了我的导入问题。