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

Setuptools打包后安装路径分散,如何统一到项目目录下

解决方案

这不是Python的默认行为,是你的setup.py配置和项目结构导致的,调整后可以实现将所有文件统一放到site-packages/my_project_name/目录下,具体步骤如下:

1. 调整项目目录结构

把main.py和generated目录都放到一个名为my_project_name的顶层包目录中,同时确保该目录和generated子目录下都存在__init__.py文件(空文件即可,用于标识这是Python包)。最终结构如下:

my_project_name/
├── setup.py
└── my_project_name/
    ├── __init__.py
    ├── main.py
    └── generated/
        ├── __init__.py
        └── (你的generated模块文件)

2. 修改setup.py配置

移除原配置中的py_modules参数,改用setuptools.find_packages()自动识别所有包结构,修改后的代码如下:

from setuptools import setup, find_packages

setup(
    name='my_project_name',
    version='0.0.1',
    description='My project',
    packages=find_packages(),
    python_requires='>=3.5',
    install_requires=[
        'requests>=2.20.0',
        'grpcio>=1.48.2',
        'grpcio-tools>=1.48.2'
    ],
)

3. 重新打包安装

执行以下命令重新生成包并安装:

python setup.py sdist
pip install dist/my_project_name-0.0.1.tar.gz

原因说明

  • 原配置中py_modules=['main']会把main.py作为独立单文件模块直接安装到site-packages根目录;
  • packages=['generated']会把generated作为独立顶层包安装到site-packages根目录;
  • 调整后的结构将main.py和generated都作为my_project_name包的子模块/子包,find_packages()会自动识别整个包结构,安装后所有文件都会被放到site-packages/my_project_name/目录下。

如果generated目录是通过grpc工具自动生成的,可手动添加空的__init__.py文件,或者在生成脚本中配置自动生成该文件,确保setuptools能识别它为合法的Python包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:01:18