【问题标题】:Why does PIP convert underscores to dashes为什么 PIP 将下划线转换为破折号
【发布时间】:2013-04-29 09:40:13
【问题描述】:

我正在尝试安装 Pyramid 应用程序——比如说test_app。在虚拟环境中,它被安装为test-app(pip freeze 输出显示它test-app==0.0)。

因此,我无法导入包。

我应该如何解决这个问题?

更多信息: http://mail.python.org/pipermail/distutils-sig/2011-August/017935.html

我使用的是 pip 版本 1.3.1

setup.py:

import os

from setuptools import setup, find_packages

here = os.path.abspath(os.path.dirname(__file__))
README = open(os.path.join(here, 'README.txt')).read()
CHANGES = open(os.path.join(here, 'CHANGES.txt')).read()

requires = [
    'pyramid',
    'pyramid_debugtoolbar',
    'waitress',
    ]

setup(name='test_app',
      version='0.0',
      description='test_app',
      long_description=README + '\n\n' + CHANGES,
      classifiers=[
        "Programming Language :: Python",
        "Framework :: Pyramid",
        "Topic :: Internet :: WWW/HTTP",
        "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
        ],
      author='',
      author_email='',
      url='',
      keywords='web pyramid pylons',
      packages=find_packages(),
      include_package_data=True,
      zip_safe=False,
      install_requires=requires,
      tests_require=requires,
      test_suite="test_app",
      entry_points="""\
      [paste.app_factory]
      main = test_app:main
      """,
      )

更新:

总结目前的发现:

  • pip报包名为test-app是正常的。
  • egg 链接指向您的虚拟环境根目录是不正常的。
  • 但是 .egg-info 文件是在您的虚拟 env 根目录中创建的这一事实也表明使用该目录作为 egg 根目录进行开发。

2021 年更新

我现在已经开始在我所有的新 Python 项目中使用 Poetry 而不是 pip。它适用于普通项目和 Jupyter 笔记本。凭借其更好的包管理开发人员体验,对于上述示例,我所要做的就是

poetry run xyz

其中xyz 是我在规范文件中定义的脚本(类似于package.json for npm)。我将能够像所有其他包一样导入我自己的包。

【问题讨论】:

  • 到目前为止的总结:develop 命令在虚拟环境根目录中创建了一个.egg-info 目录,.egg-link 文件指向同一个根目录。这是导入错误的原因。 pip 将包名称报告为 test-app 的事实是正常的。

标签: python pip pyramid python-poetry


【解决方案1】:

2021 年更新

使用Poetry 而不是pip


原答案:

所以,经过一番折腾,我终于找到了解决方案——这非常简单。

我正在使用 virtualenv 并且正在以开发模式安装包。

我从错误的位置安装包。原来运行python setup.py develop 的位置(目录)确实是进入.egg-link 文件的位置。

您应该从代码所在的位置将包安装到虚拟环境中。

因此,例如,假设您的代码位于“/a/b”中,而您的 virtualenv 环境位于“/x/y/env”中,那么您应该像这样安装软件包:

$ cd /a/b
$ /x/y/env/bin/python setup.py develop

这将正确安装软件包。

因此,“-”和“_”问题不是问题,您应该注意在 develop 模式下安装软件包的位置。

【讨论】:

  • FWIW,我已经开始使用 pip install -e . 而不是 python setup.py develop。它们在功能上是相同的,但是 pip 的版本有更少的错误。
  • 为什么bug少?你有机会提供链接吗?
猜你喜欢
  • 2017-08-18
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 2015-11-29
  • 1970-01-01
相关资源
最近更新 更多