【问题标题】:install local package into virtualenv using setuptools使用 setuptools 将本地包安装到 virtualenv
【发布时间】:2023-12-12 20:42:01
【问题描述】:

我有一个 virtualenv,里面有多个小项目。考虑到它们都是平等的,所以我的文件夹结构如下所示:

categorisation_ml/
    categorisation.py
    setup.py
    __init__.py
nlp/
    nlp.py
    setup.py
    __init__.py
etc/
__init__.py

我想将这两个软件包安装到同一个 virtualenv 中,以便在 virtualenv 中的任何地方都可以访问它们。

使用thisthis 指南,我创建了一个像这样的setup.py 脚本(在这种情况下用于分类):

from setuptools import setup, find_packages

setup(
    name = "categorisation",
    version = "1.0",
    scripts = ['categorisation.py']
)

然后,我运行 python setup.py install ,似乎成功完成。
当我cd 进入nlp/ 时,输入python 命令行并尝试
import categorisation,我得到:
ImportError: No module named categorisation

我错过了什么?

【问题讨论】:

  • 哪个 python 正在运行python setup.py install 命令? virtualenv 或用户的 python。该软件包是否安装在您的 virtualenv 之外?
  • @TomRon python 的 virtualenv 用完了。不,似乎该软件包已安装到 virtualenv 中。 virtualenv 被称为scienv。不知道这是否重要,但 categorisation.py 有 #!/usr/bin/env python shebang
  • 运行scienv/bin/pip freeze时得到什么输出?您是否使用scienv/bin/python setup.py install 安装了该软件包?
  • @TomRon 输出包含categorisation==1.0。是的,我用 virtualenv python 安装了它
  • @leoschet 我很快就回答了我自己的问题。还没有测试过,但应该可以。

标签: python virtualenv setuptools


【解决方案1】:

好像包结构和setup.py都关了。应该是这样的:

irrelevant_package_name/
    __init__.py
    setup.py
    categorisation_ml/
        categorisation.py
        __init__.py
    nlp/
        nlp.py
        __init__.py

然后安装脚本如下所示:

from setuptools import setup, find_packages

setup(
    name='package_name',
    version='1.0.0',
    description='This is a working setup.py',
    url='http://somesite.com',
    author='Roman',
    author_email='roman@somesite.com',
    packages=find_packages(),
    install_requires=[
        'numpy',
    ],
    zip_safe=False
)

然后像这样安装它:

python setup.py install  #(just installs it as is)
python setup.py develop  #(Keeps track of changes for development)

如果你 pip freeze 这应该会出现

package_name==1.0.0

然后在 python 中导入应该是这样的:

from categorisation_ml import categorisation
from nlp import nlp

【讨论】: