【问题标题】:python module imports correctly interactively but not when called in a packagepython模块以交互方式正确导入,但在包中调用时不正确
【发布时间】:2015-09-23 02:47:08
【问题描述】:

我正在尝试让 Amazon Glacier 工具在 Debian 上运行(Wheezy,不完全是——我正在运行 OpenMediaVault)。我已经安装了 Python 2.6、2.7 和 3.2。

glacier-cmd 想要 'pytz' 包,所以我不得不使用 -pip-:

root@srvr:/# pip install pytz
Collecting pytz
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading pytz-2015.4-py2.py3-none-any.whl (475kB)
    100% |████████████████████████████████| 475kB 469kB/s 
Installing collected packages: pytz
Successfully installed pytz-2015.4

好的,看起来成功了。所以,我运行 -glacier-cmd 没有参数:

root@srvr:/# glacier-cmd
Traceback (most recent call last):
  File "/usr/local/bin/glacier-cmd", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2707, in <module>
    working_set.require(__requires__)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 686, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 584, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pytz

真的吗?好像已经安装了……让我们再试一次,用pip2.7:

root@srvr:/# pip2.7 install pytz
Requirement already satisfied (use --upgrade to upgrade): pytz in /usr/local/lib/python2.7/dist-packages
root@srvr:/# pip2.7 install pytz --upgrade
Requirement already up-to-date: pytz in /usr/local/lib/python2.7/dist-packages
root@srvr:/# which pip
/usr/local/bin/pip
root@srvr:/# which pip2.7
/usr/local/bin/pip2.7

好的,最后两个命令是多余的,但我越来越偏执了。我又试了一次:

root@srvr:/# glacier-cmd 回溯(最近一次通话最后): 文件“/usr/local/bin/glacier-cmd”,第 5 行,在 从 pkg_resources 导入 load_entry_point 文件“/usr/lib/python2.7/dist-packages/pkg_resources.py”,第 2707 行,在 working_set.require(需要) 文件“/usr/lib/python2.7/dist-packages/pkg_resources.py”,第 686 行,在要求中 需要 = self.resolve(parse_requirements(requirements)) 解析中的文件“/usr/lib/python2.7/dist-packages/pkg_resources.py”,第 584 行 提高 DistributionNotFound(req) pkg_resources.DistributionNotFound: pytz

我被难住了。我以交互方式运行 python 和 -pytz- 导入,似乎工作正常!

root@srvr:/# python
Python 2.7.3 (default, Mar 13 2014, 11:03:55) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
- import sys
- print sys.path
['', '/usr/local/lib/python2.7/dist-packages/glacier-0.2dev-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/boto-2.38.0-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7']
-  import pytz
-  from pytz import timezone
-  utc=pytz.utc
-  utc.zone
'UTC'
-  exit()

...但是当我这样称呼它时,它继续失败:

root@srvr:/# glacier-cmd
Traceback (most recent call last):
  File "/usr/local/bin/glacier-cmd", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2707, in <module>
    working_set.require(__requires__)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 686, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 584, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pytz

我始终以同一用户身份运行。我什至放弃了,以root身份连续运行。

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    您的计算机上有两个不同的 Python 安装:

      /usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
    

      /usr/local/lib/python2.7/
    

    还有

      /usr/local/bin/glacier-cmd
    

      /usr/lib/python2.7/
    

    使用您的发行版提供的pip 包而不是/usr/local/bin/pip 来安装pytz,然后glacier-cmd 应该会看到它。或者,如果您计划与安装到系统范围的 Python 安装的命令一起使用,甚至更好地从分发包安装 pytz

    或者构建 virtualenv,您可以在其中安装命令包(推荐)。 See Python package installation documentation.

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 2010-12-19
      • 2017-02-23
      • 2018-09-20
      • 2021-02-04
      • 2021-05-01
      相关资源
      最近更新 更多