【问题标题】:packaging a second-level sub-directory打包一个二级子目录
【发布时间】:2020-01-29 13:26:23
【问题描述】:

我有这个项目架构,我想让my_package pip 可安装。该项目不仅包含要打包的东西,还包含简单的脚本(快速和肮脏的那种)以及对我的项目很重要但对包不重要的东西(例如外部数据)。

my_project
├── code
│   ├── data          #<-- I don't want to package this
│   │   └── make_dataset.py
│   ├── script        #<-- I don't want to package this
│   │   └── make_experiment.py
│   └── my_package    #<-- This is the module I want to package
│       ├── core.py
│       ├── utils.py
│       └── __init__.py
├── data
│   └── some_data.txt
├── references
│   └── reference_paper.pdf
├── reports
│   └── report.tex
├── LICENSE
├── README.md
├── requirements.txt
└── setup.py

我希望setup.py 文件位于顶级目录中,以便人们可以照常进行

git clone gitinstance.com/my_project
cd my_project
pip install .

并在他们的环境中安装my_package 模块,以便他们已经可以执行python -c import my_package; print(my_package.__version__) 并且它可以工作。

问题是:如何在不将setup.py 放入code 目录的情况下使my_package pip 可安装?

通常,setup.py 看起来像这样:

from setuptools import find_packages, setup

setup(
    name='my_package',
    packages=find_packages(),
    version='0.1.0',
    description='Research project',
    author='Name',
    license='MIT',
)

但它不会在这里工作,因为setup.py 找不到my_package

【问题讨论】:

    标签: python python-3.x pip setup.py


    【解决方案1】:

    I found an example in the documentation of setuptools that more or less fit my use-case.

    解决方案在setup 函数的packagespackage_dir 参数中,允许指定在哪里找到要安装的包。这通常是隐藏的,因为它默认为当前工作目录。

    在我的简单例子中,setup.py 转换为:

    from setuptools import find_packages, setup
    
    setup(
        name='my_package',
        packages=find_packages(where="code"),
        package_dir={'': "code"},
        version='0.1.0',
        description='Research project',
        author='Name',
        license='MIT',
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 2020-08-26
      • 2017-09-01
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多