在虚拟环境中安装我自己的Python模块

问题描述 投票:0回答:2

我有:

  • 我想将其转换为模块的本地Python3文件

    test_module

  • test_module
    文件夹,其中包含一个空
    __init__.py
    、一个
    setup.py
    文件(见下文)以及包含多个源代码的子目录 文件

我想要什么:

  1. 在当地不断努力和改进

    test_module

  2. 有一种简单的方法可以在我自己的虚拟环境中本地安装

    test_module
    及其所有依赖项(使用
    python3 -m venv my_environment
    创建)

  3. 通过

    python myexample.py
    运行使用该模块的文件,而无需在每次进入或退出
    my_environment

  4. 时调整本地 PYTHONPATH 变量
  5. 通过 git 与其他人分享我的 python 代码,并允许他们使用相同的过程(尽可能简单)在他们的机器上本地安装代码

  6. 学习如何创建自己的模块的最佳实践

我现在是怎么做的:

  • pip freeze > requirements.txt
    pip install -r requirements.txt
    用于安装依赖项

  • export PYTHONPATH="${PYTHONPATH}:."
    添加到
    my_environment/bin/activate
    ,以便在搜索路径中拥有我自己的模块 (如下所示:如何在已创建的 virtualenv 中设置 pythonpath?

我想知道是否有基于

setup.py
的“更干净”的解决方案,可能涉及
pip install ./test_module
或类似的解决方案 2.-3。自动。

我当前的

setup.py
文件如下所示

 from setuptools import setup

 setup(
    name='test_module',
    version='0.1',
    description='Some really good stuff, that I am still working on',
    author='Bud Spencer',
    author_email='[email protected]',
    packages=['test_module'],  # same as name
    install_requires=['numpy', 'scipy', 'sklearn', 'argparse'], # external packages as dependencies
  )
python module virtualenv
2个回答
4
投票

听起来您想在虚拟环境中运行

pip install -e <path/url>
,它将从本地路径或 Git 存储库安装一个软件包(带有您拥有的
setup.py
文件)。有关后者语法的说明,请参阅 https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

示例:

pip install -e git+https://github.com/me/test_module/#egg=test-module

如果您已经安装并希望从存储库中提取最新代码,请在上面添加

--upgrade
开关。


0
投票

我做什么:

  1. 使 venv 成为我的项目目录的子目录,如果需要,可以在

    .gitignore
    中添加排除行。例如,如果我的项目位于
    /home/me/project
    ,我会使用
    python3.12 -m venv /home/me/project/venv
    创建 venv。

  2. 作为项目一部分开发的 python 库位于

    /home/me/project/local/lib

  3. 在作为项目一部分开发的Python脚本中,在导入“外部”模块(即来自标准库的模块以及安装到venv中的任何模块)之后,在导入“本地”模块之前,我输入了以下内容:

import sys
from pathlib import Path

sys.path.append(str(Path(sys.prefix).parent / 'local/lib'))

如您所知,这依赖于将

sys.prefix
设置为虚拟环境的正确路径名的解释器。

© www.soinside.com 2019 - 2024. All rights reserved.