【问题标题】:Python imports confusionPython导入混乱
【发布时间】:2011-01-15 19:33:20
【问题描述】:

我在导入模块时遇到了一个奇怪的问题。我有一个 virtualenv 设置,{env}/lib/python2.6/site-packages/pkgname 中有一个模块可用。里面有一个__init__.py文件和pkgname.py

现在,如果我运行{env}/bin/python 并执行import pkgname.pkgname,它就可以正常工作。但是如果我在{env}/bin/pkgname.py 中创建一个脚本,其内容为:

#!{env}/bin/python

import pkgname.pkgname

if __name__ == "__main__":
  pkgname.pkgname.run()

尝试再次导入相同的文件失败(因为包和文件具有相同的名称)。如何禁用在同一目录中查找?或者如何强制导入首先查看全局包?

或者,这样做的“正确”方式是什么?只是为了保持一致性,我宁愿将我的启动脚本称为与其尝试运行的实际包相同的名称。

【问题讨论】:

  • 这就是为什么我们不对公共目录中的可执行文件进行扩展。

标签: python import packages


【解决方案1】:

称它为 pkgname。完毕。好的,然后双击WINdows就启动不了了,不过一般不会有问题的。

【讨论】:

  • 另外,您必须将文件移动到某个位置,例如“scripts/pkgname”,否则它会与“pkgname”包本身发生冲突。它有效。
  • 对,在这种情况下,它位于 {env}/bin 中,如问题中所述。这意味着 /usr/local/bin 或类似的东西。而且我的包通常放在 src/pkgname 中,所以那里没有 pb。 :)
【解决方案2】:

您可以修改 sys.path。它只是要搜索的路径列表,当前文件夹应该是第一个条目。如果您将当前文件夹移动到列表的末尾,您的文件应该会运行。但我一般来说,如果没有很好的理由,我不会做那样的事情。是不是可以重命名你的文件名.py、runpkgname.py 之类的?

【讨论】:

  • 或者只是删除 .py 扩展名,使其不再具有有效的模块名称。
猜你喜欢
  • 2014-03-29
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多