Skip to main content

Python代码编译发布

要展示如何将一个Python项目打包,并引用项目子目录中的其他模块,我们可以创建一个简单的项目结构并使用setuptools来打包项目。下面是一个基本的示例:

项目结构

my_project/

├── my_package/
│ ├── __init__.py
│ ├── main.py
│ └── subpackage/
│ ├── __init__.py
│ └── helper.py

├── README.md
├── setup.py
└── requirements.txt

代码实现

  1. 创建功能模块

  • my_package/subpackage/helper.py
def greet(name):
return f"Hello, {name}!"
  • my_package/main.py
from my_package.subpackage.helper import greet

def main():
name = "World"
message = greet(name)
print(message)

if __name__ == "__main__":
main()
  1. 初始化模块

  • my_package/init.py
# This file can be left empty or include package-level imports.
  • my_package/subpackage/init.py
# This file can be left empty or include subpackage-level imports.
  1. 创建项目配置文件

  • setup.py
from setuptools import setup, find_packages

setup(
name='my_project',
version='0.1',
packages=find_packages(),
install_requires=[
# You can specify dependencies here
],
entry_points={
'console_scripts': [
'my_project = my_package.main:main'
]
},
author='Your Name',
author_email='your.email@example.com',
description='A sample Python project',
long_description=open('README.md').read(),
long_description_content_type='text/markdown',
url='https://github.com/yourusername/my_project',
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
],
python_requires='>=3.6',
)
  • requirements.txt
# Here you can specify required external packages
# Example
# numpy >= 1.20.0

如何打包和安装

  1. 准备打包

    • 确保setup.py中信息正确,例如库的名称、版本、依赖项等。
  2. 打包项目

    • 在项目根目录下运行以下命令:

      python setup.py sdist bdist_wheel
    • 这将生成dist/目录,里面将包含.tar.gz.whl文件。

  3. 安装打包的项目

    • 使用pip安装你的包。仍在项目根目录下运行:

      pip install .
  4. 测试安装

    • 安装后,你可以在命令行中运行你的脚本:

      my_project
    • 这命令将执行my_package.main:main函数,并输出Hello, World!

项目中的重要点

  1. 模块引用

    通过from my_package.subpackage.helper import greet,我们展示了如何从子目录中导入模块。

  2. 打包工具

    使用setuptools进行打包,使得项目可以方便地发布和安装。

  3. 入口点

    使用entry_points配置控制台脚本,使得安装后的包可以作为独立命令使用。

这样,通过这种结构和配置,可以有效地组织代码,使其在项目中简洁而易于扩展。

打包时报错 "error: invalid command 'bdist_wheel'" 通常是因为 wheel 包尚未安装。setuptools 本身提供了 sdist(源码发布包)命令,但 bdist_wheel 依赖于 wheel 包来生成二进制包。

打包报错:解决方法

  1. 安装 wheel

    你需要确保 wheel 包安装在你的Python环境中。你可以通过运行以下命令来安装它:

    pip install wheel
  2. 重新运行打包命令

    安装 wheel 后,再次尝试运行打包命令:

    python setup.py sdist bdist_wheel

验证步骤

  1. 检查安装

    确认无误地安装了 wheel

    pip show wheel

    如果显示出包信息,那么说明 wheel 已正确安装。

  2. 再次运行打包命令,并检查没有抛出之前的错误。

如果以上步骤仍未解决问题,请检查你的Python环境是否是正确的虚拟环境,或者重新创建一个新的虚拟环境尝试。

通过确保安装 wheel,你应该能够成功运行 bdist_wheel 命令并生成所需的包。

出现这个错误通常是因为脚本没有正确安装为可执行的命令。下面是一些可能原因和相应的解决方法:

运行报错:检查安装是否正确

  1. 入口点设置

    确保你的setup.pyentry_points部分正确配置。示例如下:

    entry_points={
    'console_scripts': [
    'my_project = my_package.main:main'
    ]
    },

    请核对my_package.main:main这一点,确保你的包和函数路径正确。

  2. 重新安装包

    尝试卸载并重新安装你的包。这可以确保所有配置更新被应用:

    pip uninstall my_project
    pip install .
  3. 环境路径

    确保脚本所在位置在系统的PATH环境变量中。通常运行为可执行文件的脚本会在Python的scripts目录中(如 ...\PythonXX\Scripts\)被找到;确保这个目录在你的系统PATH中。

验证安装路径

  1. 查看可执行文件位置

    打印pip安装路径的相关信息,查看是否有my_project文件被创建在脚本目录中:

    pip show my_project
  2. 手动执行脚本

    试着手动执行Python脚本来确保它能正常工作:

    python -m my_package.main

    如果它能运行,说明脚本逻辑正常,可能是入口点配置不当或安装命令没有正确应用。

使用虚拟环境

若使用的是系统环境,可能会因为其他程序的干扰导致入口点安装失败。尝试使用虚拟环境:

  1. 创建虚拟环境

    python -m venv venv
  2. 激活虚拟环境

    • Windows:

      .\venv\Scripts\activate
    • macOS/Linux:

      source venv/bin/activate
  3. 在虚拟环境中安装你的包

    pip install .

在虚拟环境中安装和测试可以隔离环境带来的其它程序干扰,验证这是否是问题。

通过以上步骤,问题应该能够解决。如果仍然无法识别,可能需要详细检查setup.py或者重新初始化你的项目结构。