python setup.py的使用

查看python setup.py相关命令

主要分成build和install两类
python setup.py --help-commands

hui@hui-XPS-8920:~$ python spam_setup.py --help-commands
Standard commands:
  build            build everything needed to install
  build_py         "build" pure Python modules (copy to build directory)
  build_ext        build C/C++ extensions (compile/link to build directory)
  build_clib       build C/C++ libraries used by Python extensions
  build_scripts    "build" scripts (copy and fixup #! line)
  clean            clean up temporary files from 'build' command
  install          install everything from build directory
  install_lib      install all Python modules (extensions and pure Python)
  install_headers  install C/C++ header files
  install_scripts  install scripts (Python or otherwise)
  install_data     install data files
  sdist            create a source distribution (tarball, zip file, etc.)
  register         register the distribution with the Python package index
  bdist            create a built (binary) distribution
  bdist_dumb       create a "dumb" built distribution
  bdist_rpm        create an RPM distribution
  bdist_wininst    create an executable installer for MS Windows
  check            perform some checks on the package
  upload           upload binary package to PyPI

usage: spam_setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
   or: spam_setup.py --help [cmd1 cmd2 ...]
   or: spam_setup.py --help-commands
   or: spam_setup.py cmd --help

如下为python编译C extensions的步骤

# 编译
# python setup.py build --inplace 
python setup.py build_ext --inplace
# 清楚.o的临时文件
python setup.py clean
# 在python的lib目录下建立软连接到编译生成的.so
python setup.py install
python spam_setup.py build_ext

生成了build目录,里面有两个文件夹lib.xxxx和temp.xxxx,lib.xxxx里面是编译生成的.so动态库,temp.xxxx是编译临时生成的二进制文件.

hui@hui-XPS-8920:~$ python setup.py build_ext
running build_ext
building 'spam' extension
creating build
creating build/temp.linux-x86_64-3.7
gcc -pthread -B /home/hui/ide/miniconda3/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/hui/ide/miniconda3/include/python3.7m -c spam.c -o build/temp.linux-x86_64-3.7/spam.o
creating build/lib.linux-x86_64-3.7
gcc -pthread -shared -B /home/hui/ide/miniconda3/compiler_compat -L/home/hui/ide/miniconda3/lib -Wl,-rpath=/home/hui/ide/miniconda3/lib -Wl,--no-as-needed -Wl,--sysroot=/ build/temp.linux-x86_64-3.7/spam.o -o build/lib.linux-x86_64-3.7/spam.cpython-37m-x86_64-linux-gnu.so
hui@hui-XPS-8920:~$ ls -R
.:
build  setup.py  spam.c

./build:
lib.linux-x86_64-3.7  temp.linux-x86_64-3.7

./build/lib.linux-x86_64-3.7:
spam.cpython-37m-x86_64-linux-gnu.so

./build/temp.linux-x86_64-3.7:
spam.o
python setup.py build_ext --inplace

相对python setup.py build_ext,会把.so库文件生成在当前目录下,而不会生成一个lib.xxx目录放置该文件

hui@hui-XPS-8920:~$ python setup.py build_ext --inplace
running build_ext
building 'spam' extension
creating build
creating build/temp.linux-x86_64-3.7
gcc -pthread -B /home/hui/ide/miniconda3/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/hui/ide/miniconda3/include/python3.7m -c spam.c -o build/temp.linux-x86_64-3.7/spam.o
gcc -pthread -shared -B /home/hui/ide/miniconda3/compiler_compat -L/home/hui/ide/miniconda3/lib -Wl,-rpath=/home/hui/ide/miniconda3/lib -Wl,--no-as-needed -Wl,--sysroot=/ build/temp.linux-x86_64-3.7/spam.o -o /home/data/github/BlogCode/python_invoke_cpp/python_C_API/spam.cpython-37m-x86_64-linux-gnu.so
hui@hui-XPS-8920:~$ ls -R
.:
build  setup.py  spam.c  spam.cpython-37m-x86_64-linux-gnu.so

./build:
temp.linux-x86_64-3.7

./build/temp.linux-x86_64-3.7:
spam.o
python setup.py clean

删除编译生成的.o临时文件,如果build下删空了,则删除build,不会删除.so

hui@hui-XPS-8920:~/github/BlogCode/python_invoke_cpp/python_C_API$ python setup.py clean
running clean
removing 'build/temp.linux-x86_64-3.7' (and everything under it)
removing 'build'
hui@hui-XPS-8920:~/github/BlogCode/python_invoke_cpp/python_C_API$ ls
setup.py  spam.c  spam.cpython-37m-x86_64-linux-gnu.so
### 回答1: Python setup.py develop报错可能是由于多种原因引起的,需要具体分析错误信息和环境配置。常见的错误包括依赖库缺失、Python版本不兼容、权限不足等。建议先检查环境配置和依赖库是否正确安装,如果问题仍然存在,可以提供具体的错误信息和环境配置,以便更好地定位问题。 ### 回答2: 当我们在使用Python环境中使用python setup.py develop”命令时,有时候会遇到报错的情况,表现为输出一些错误信息,并且无法成功安装或运行程序。这种情况的出现通常有多种原因,下面我们来详细探讨一下可能的原因和解决方案。 1. 环境问题 首先,检查一下当前环境是否激活了Python对应的虚拟环境,如果没有激活的话,命令行运行“workon your_env”或者“source activate your_env”进行激活,其中“your_env”指的是你想使用的虚拟环境名称。如果还是无法解决问题,那么就需要进一步检查Python环境的版本是否合适。 2. 依赖问题 第二个可能的原因是依赖问题,如果软件包依赖于其他的Python模块或库,那么在执行“python setup.py develop”之前,我们需要手动安装这些依赖的模块或库。可以通过pip进行安装或者手动下载来进行安装。 3. 文件路径问题 第三个问题是文件路径问题,有时候我们的代码中可能没有正确指定文件路径,导致安装或运行时出现错误。需要检查setup.py文件是否包含正确的文件路径。 4. 权限问题 最后一个问题是权限问题,有些系统可能会因为权限不足而导致“python setup.py develop”命令无法执行。可以通过chmod命令给当前用户授权。 综上所述,Python环境中“python setup.py develop”命令报错的原因可能有很多,有时候需要多方面的排查和解决。需要根据错误信息,逐一排查可能的问题,以解决这个问题。 ### 回答3: 在运行Python程序时,可能会遇到各种各样的错误。其中之一就是运行“python setup.py develop”命令报错。这种错误通常是由于环境配置问题引起的,下面我将介绍可能导致此错误的原因和解决方法。 1. 没有正确安装setuptools或pip setuptools和pip是常用的包管理工具,如果没有正确地安装它们,那么开发模式的安装就会出错。解决这个问题的方法是安装setuptools和pip,并将它们添加到环境变量中。 2. 当前目录下没有setup.py文件 如果在当前目录下找不到setup.py文件,那么运行“python setup.py develop”命令就会报错。解决这个问题的方法是在当前目录中创建setup.py文件或者进入到包含setup.py文件的目录中运行该命令。 3. virtualenv环境问题 如果运行该命令时出现virtualenv环境问题,那么可能是由于该环境中缺少必需的库或因为虚拟环境没有激活引起的。此时可以使用以下命令激活虚拟环境: $ source env/bin/activate 4. 缺少所需的依赖库 如果运行“python setup.py develop”时出现缺少所需的依赖库错误,那么可能是由于环境中缺少必需的库或者版本不匹配。解决这个问题的方法是在requirements.txt文件中列出所有需要的依赖库,并使用pip命令安装这些库。 总而言之,运行“python setup.py develop”命令报错可能是由于多种原因引起的,需要仔细检查环境配置、依赖库以及文件路径等因素,才能找到并解决问题。在处理问题时可以先查看错误信息,根据错误信息调整代码或者环境配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值