首页 / PYTHON / Python模块搜索路径问题
Python模块搜索路径问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python模块搜索路径问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2203字,纯文字阅读大概需要4分钟。
内容图文
![Python模块搜索路径问题](/upload/InfoBanner/zyjiaocheng/651/0438881486084915b9b5cf38bf3bc05b.jpg)
我正在尝试在开发环境上工作,但是发现问题在于python似乎正在使用site-packages目录中的模块.我希望它使用我的dev目录中的模块.
sys.path返回一堆目录,像这样
['', '/usr/lib/python26.zip', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/site-packages' etc
很好,它将当前目录用作查找的第一位(至少这是我所理解的方式).
好的,现在,如果我在当前目录中创建一个名为command.py的文件,那么一切都会按预期进行.
>>> import commands
>>> commands.__file__
'commands.pyc'
然后,我退出python shell,并启动另一个.然后,我这样做.
>>> import foo.bar.commands
现在,我期望它能从当前目录下移至./foo/bar/并从那里获取命令模块.我得到的是这个
>>> foo.bar.commands.__file__
'/usr/lib/python2.6/site-packages/foo/bar/commands.pyc'
即使从我当前的目录中有一个./foo/bar/commands.py
使用imp.find_module()和imp.load_module()可以正确加载本地模块.真正有趣的是(尽管我真的不知道这意味着什么)是按此顺序打印的最后一行
>>> import foo.bar.commands
>>> foo.bar.commands.__file__
'/usr/lib/python2.6/site-packages/foo/bar/commands.pyc'
>>> foo.bar.__file__
'/usr/lib/python2.6/site-packages/foo/bar/__int__.pyc'
>>> foo.__file__
'./foo/__init__.pyc'
因此,如果它可以在本地目录中找到foo / init.pyc,为什么不能在本地目录中找到其他文件?
干杯
解决方法:
您提到您当前目录下有一个foo目录,但您没有告诉我们foo / __ init__.py是否存在(甚至可能为空):如果不存在,这会告诉Python foo不是包.同样对于foo / bar / __ init__.py -如果该文件不存在,即使foo / __ init__.py也不存在,则foo.bar不是包.
您可以通过在包中放置.pth文件和/或显式设置__path__来进行一些操作,但是基本的简单规则是将__init__.py放置在您希望Python识别为包的每个目录中.该文件的内容是包本身的“主体”,因此,如果您导入foo并且foo是包含foo / __ init__.py文件的目录,那么就是您要导入的内容(无论如何,包的主体将执行首次从包或其子包中导入任何内容).
如果这不是问题,则似乎其他导入(或显式的sys.path操作)可能使您感到困惑.使用-v标志运行python可使导入高度可见,这可以有所帮助.另一个好的技术是
import pdb; pdb.set_trace()
在您认为导入行为不正确之前,并在此时检查sys.path,sys.modules(以及可能的其他高级结构,例如import hooks)之前,是否已经定义了sys.modules [‘foo’],例如?交互式地尝试标准库模块的功能,即代表您给定路径定位模块也可能具有启发性.
内容总结
以上是互联网集市为您收集整理的Python模块搜索路径问题全部内容,希望文章能够帮你解决Python模块搜索路径问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。