为什么PIP将下划线转换为破折号

tre*_*der 8 python pip pyramid

我正在尝试安装金字塔应用程序 - 让我们说test_app.在虚拟环境中,它正在安装为test-app(pip冻结输出显示它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
      """,
      )
Run Code Online (Sandbox Code Playgroud)

更新:

总结迄今为止的调查结果:

  • pip将包名称报告为test-app是正常的.
  • egg链接指向虚拟env根目录是不正常的.
  • 但是.egg-info文件是在虚拟环境根目录中创建的,并且指向使用该目录作为egg root进行开发.

tre*_*der 5

所以,经过大量的摆弄后,我终于找到了解决方案 - 这非常简单.

我正在使用virtualenv并在开发模式下安装包.

我从错误的位置安装包.事实证明,您运行的位置(目录)python setup.py develop确实是进入该.egg-link文件的位置(目录).

您应该将软件包安装到虚拟环境中,从您的代码所在的位置开始.

所以,例如,假设您的代码位于'/ a/b',而您的virtualenv env位于'/ x/y/env',那么您应该像这样安装包:

$ cd /a/b
$ /x/y/env/bin/python setup.py develop
Run Code Online (Sandbox Code Playgroud)

这将正确安装包.

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

  • FWIW,我已经开始使用`pip install -e .` 而不是`python setup.py develop`。它们在功能上是等效的,但 pip 的版本错误较少。 (2认同)