【发布时间】:2017-11-17 22:18:35
【问题描述】:
我制作了一个需要执行 C 函数的 Python 应用程序。为此,我使用 gcc 在共享库中编译了 C 函数,并使用 ctypes 在我的 Python 脚本中调用了该库。
我正在尝试将我的应用程序打包到 pip 包中,但发现无法在 pip 安装时创建共享库。
我尝试了以下(setup.py):
from setuptools import setup
from setuptools.command.install import install
import subprocess
class compileLibrary(install):
def run(self):
install.run(self)
command = "cd packageName"
command += " && git clone https://mygit.com/myAwesomeCLibrary.git"
command += " && gcc -my -many -options"
process = subprocess.Popen(command, shell=True)
process.wait()
setup(
name='packageName',
version='0.1',
packages=['packageName'],
install_requires=[
...
],
cmdclass={'install': compileLibrary},
)
这在执行python setup.py install 时有效,但是从 pip 安装时,虽然安装过程成功,但共享库不在包文件夹中 (pythonx.x/site-packages/packageName)。
我尝试使用 distutils 得到相同的结果。
基于Run Makefile on pip install的问题,我还尝试了以下 setup.py :
from setuptools import setup
from distutils.command.build import build
import subprocess
class Build(build):
def run(self):
command = "cd packageName"
command += " && git clone https://mygit.com/myAwesomeCLibrary.git"
command += " && gcc -my -many -options"
process = subprocess.Popen(command, shell=True)
process.wait()
build.run(self)
setup(
name='packageName',
version='0.1',
packages=['packageName'],
install_requires=[
...
],
cmdclass={'build': Build},
)
这是我的包的架构
packageName/
├── packageName/
│ ├── __init__.py
│ ├── myFunctions.c
├── MANIFEST.in
├── README.md
├── setup.py
注意:使用pip安装包后,我的安装文件夹(pythonx.x/site-packages/packageName)中只有__init__.py和__pycache__。
如何在 pip install 期间创建共享库,以便我的包可以使用它?
【问题讨论】: