You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术咨询:Python项目安装文件全部署至lib并保留入口点功能

如何调整Python项目配置,将安装相关文件部署至lib目录并保留入口点功能

我明白你想要的效果——一是把构建产物(dist、build)、虚拟环境(env)都放到lib目录下,不再堆在项目根目录;二是确保安装后所有自己的代码都归在lib这个顶级包下,同时bin和lib里的入口点脚本能正常工作。下面分两步来调整:

一、调整项目结构与setup.py配置,让代码统一归到lib包下

  1. 调整目录结构:把根目录下的bin文件夹移动到lib目录内部,变成lib/bin。这样你的所有业务代码就都属于lib这个顶级包了,调整后的目录结构如下:
.
├── README.md
├── lib
│   ├── __init__.py
│   ├── bin
│   │   ├── __init__.py
│   │   └── fix_sales_quotes.py
│   ├── logger.py
│   ├── oracle_dbx_connector
│   │   ├── __init__.py
│   │   ├── dbx_connector.py
│   │   └── timeout.py
│   └── sales_quote
│       ├── __init__.py
│       ├── data
│       │   ├── __init__.py
│       ├── get_processed_quotes.py
│       ├── get_stuck_quotes.py
│       ├── get_subscriber_ids.py
│       └── get_workflow_events.py
│       └── report.py
├── requirements.txt
├── setup.py
└── var
    ├── logs
    └── reports
  1. 修改setup.py的核心配置:
    • 更新packages参数,确保只包含lib及其所有子包:
      packages=find_packages(include=['lib*']),
      
    • 调整entry_points里的模块路径,把原来的bin.xxx改成lib.bin.xxx,其他lib下的路径保持不变:
      entry_points={
          'console_scripts': [
              'sales_quote.stuck_quotes = lib.sales_quote.data.get_stuck_quotes:main',
              'sales_quote.processed_quotes = lib.sales_quote.data.get_processed_quotes:main',
              'sales_quote.subscriber_ids = lib.sales_quote.data.get_subscriber_ids:main',
              'sales_quote.workflow_events = lib.sales_quote.data.get_workflow_events:main',
              'sales_quote.report = lib.sales_quote.report:main',
              'sales_quote.fix = lib.bin.fix_sales_quotes:entry_point'  # 这里修改了模块路径
          ]
      },
      

二、把构建产物和虚拟环境放到lib目录

  1. 自定义虚拟环境位置:创建虚拟环境时直接指定路径到lib下,避免生成在根目录:

    python -m venv lib/env
    

    激活环境的命令也对应调整:

    • Linux/macOS:source lib/env/bin/activate
    • Windows:lib\env\Scripts\activate.bat
  2. 指定构建产物的输出目录:
    推荐在项目根目录创建setup.cfg文件,添加以下配置,这样每次构建时无需手动加参数:

    [build]
    build-base = lib/build
    
    [bdist_wheel]
    dist-dir = lib/dist
    
    [sdist]
    dist-dir = lib/dist
    

    之后运行python setup.py sdist bdist_wheel,生成的安装包会放在lib/dist,临时构建文件会存到lib/build。

验证效果

完成以上调整后,在虚拟环境中运行pip install .安装项目,你会发现site-packages里只有lib目录,所有业务代码都归在这个目录下;同时运行sales_quote.fix、sales_quote.stuck_quotes等入口命令,都能正常执行逻辑。

内容的提问来源于stack exchange,提问作者Branden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 12:47:26