在具有所有要求的venv中通过“setuptools”打包和运行项目

时间:2018-06-13 16:54:37

标签: python python-3.x setuptools python-packaging

项目结构如下所示:

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

确实安装了所有必需的软件包。但是,从这里开始,我不确定要实际执行我的脚本的步骤。如何在创建的虚拟环境中实际执行项目?

此外,我有一些问题:

  1. setup.py仅用于安装要求吗?上述两个命令在输出方面有何不同?
  2. 除了安装需求外,您是否需要手动将项目文件放在所需的目录中?由于pip install * .tar.gz没有解压缩任何项目文件!
  3. 如何在setup.py中使用entry_points

2 个答案:

答案 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 .的内容在本地安装软件包。

希望这有帮助。