项目结构如下所示:
project/
|-- src/
| |--sub_project1/
| |--__init__.py
| |-- main.py
| |-- __init__.py
| |-- requirements.txt
|
|-- setup.py
|-- README.md
|-- MANIFEST.in
我开始使用setuptools
来打包我的项目。我认为我成功创建了一个发行版,但我不确定如何在虚拟环境(venv
)中彻底设置项目以运行src\sub_project1\main.py
的后续过程。
到目前为止我遵循的步骤:
requirements.txt
创建pipreqs
。 setup.py
,其include_package_data=True
设置为requirements.txt
MANIFEST.in
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
仅用于安装要求吗?上述两个命令在输出方面有何不同?entry_points
答案 0 :(得分:0)
要激活virtualenv,必须运行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
一样工作。
入口点要广泛一些,但是here是入门的好资源。
答案 1 :(得分:-2)
您可以查看https://setupy.info/以获取有关setup.py的更多信息,它应该回答问题1和2.
您还可以在项目中使用类似pip install -e .
的内容在本地安装软件包。
希望这有帮助。