我有:
我想将其转换为模块的本地Python3文件
test_module
test_module
文件夹,其中包含一个空 __init__.py
、一个 setup.py
文件(见下文)以及包含多个源代码的子目录
文件我想要什么:
在当地不断努力和改进
test_module
有一种简单的方法可以在我自己的虚拟环境中本地安装
test_module
及其所有依赖项(使用python3 -m venv my_environment
创建)通过
python myexample.py
运行使用该模块的文件,而无需在每次进入或退出 my_environment
通过 git 与其他人分享我的 python 代码,并允许他们使用相同的过程(尽可能简单)在他们的机器上本地安装代码
学习如何创建自己的模块的最佳实践
我现在是怎么做的:
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
)
听起来您想在虚拟环境中运行
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
开关。
我做什么:
使 venv 成为我的项目目录的子目录,如果需要,可以在
.gitignore
中添加排除行。例如,如果我的项目位于 /home/me/project
,我会使用 python3.12 -m venv /home/me/project/venv
创建 venv。
作为项目一部分开发的 python 库位于
/home/me/project/local/lib
。
在作为项目一部分开发的Python脚本中,在导入“外部”模块(即来自标准库的模块以及安装到venv中的任何模块)之后,在导入“本地”模块之前,我输入了以下内容:
import sys
from pathlib import Path
sys.path.append(str(Path(sys.prefix).parent / 'local/lib'))
如您所知,这依赖于将
sys.prefix
设置为虚拟环境的正确路径名的解释器。