14

我正在尝试安装一个 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

设置.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-info 文件是在您的虚拟环境根目录中创建的这一事实也表明使用该目录作为 egg 根目录进行开发。

2021 年更新

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

poetry run xyz

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

4

1 回答 1

6

2021 年更新

诗歌代替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模式下安装包的位置。

于 2013-05-05T19:36:27.787 回答