项目结构如下所示:
project/
|-- src/
| |--sub_project1/
| |--__init__.py
| |-- main.py
| |-- __init__.py
| |-- requirements.txt
|
|-- setup.py
|-- README.md
|-- MANIFEST.in
我从setuptools
开始,以便打包我的项目。我认为我成功地创建了一个发行版,但我不确定如何在虚拟环境(venv
(中彻底设置项目以运行srcsub_project1main.py
的后续过程。
到目前为止,我遵循的步骤:
- 通过
pipreqs
创建requirements.txt
。 - 创建
setup.py
,它将include_package_data=True
设置为包含MANIFEST.in
中提到的requirements.txt
setup.py
:
from setuptools import setup, find_packages
import pkg_resources
with open("README.md", "r") as fh:
long_description = fh.read()
# read data from .txt as str, decode and then split to get a list of requirements
requirements = pkg_resources.resource_string('src', 'requirements.txt').decode("utf-8").split()
setup(
...
packages=find_packages(),
include_package_data=True,
install_requires=requirements,
...
)
MANIFEST.in
:
include *.txt
生成分配:
python setup.py sdist bdist_wheel
现在,由于我已经打包了项目,我想创建一个虚拟环境,设置依赖项并运行它。
我首先创建了一个虚拟环境,使用python -m venv <DIR>
.并使用以下两个命令之一来安装所有要求:
pip install -r requirements.txt
或
pip install ./downloads/SomeProject-1.0.4.tar.gz
它会安装所有必需的软件包。但是,从这里开始,我不确定实际执行脚本的步骤。如何在创建的虚拟环境中实际执行项目?
此外,我有一些问题:
setup.py
仅用于安装要求吗?上述两个命令在输出方面有何不同?- 除了安装需求之外,您是否需要手动将项目文件放在所需的目录中?由于 pip install *.tar.gz 没有解压缩任何项目文件!
- 如何在 setup.py 中使用
entry_points
?
要激活虚拟环境,您必须运行source /path/to/venv/bin/activate
。然后,当您 cd 到包含setup.py
的目录并运行pip install .
时,它将安装您的软件包及其所有依赖项。
在任何时候,您都可以运行which pip
以查看安装将使用哪个 pip。如果要将软件包安装到 virtualenv 中,请确保这是/path/to/venv/bin/pip
。
pip install -r requirements.txt
将只安装requirements.txt
中列出的软件包。pip install /path/to/tar.gz
应该像pip install /path/to/package
一样工作.
入口点更广泛一些,但这里有一个很好的入门资源。
您可以查看https://setupy.info/以获取有关 setup.py 的更多信息,它应该回答问题 1 和 2。
您还可以在项目中使用pip install -e .
之类的内容在本地安装包。
希望这有帮助。