一般问题: 在setuptools中是否有一种方法可以在前缀\ Lib \ site-packages目录中安装dll?
我的具体需求: PyQt5没有为Python2.7提供二进制安装程序,所以我是从源代码构建的,为了方便起见,我想打包结果。官方安装程序将sip.pyd放在前缀\ Lib \ site-packages中,我希望保持一致。但我不确定如何。看来我可以使用py_modules或ext_modules来定义我希望模块去的地方,但是我无法弄清楚如何使用.pyd文件来处理它们。
我很关心windows,但我想如果有一个setuptools解决方案,它将与平台无关。如果重要,我正在尝试部署为轮(.whl)文件。
这就是我所拥有的:
from setuptools import setup, find_packages, Extension
setup(name='PyQt5',
version='5.2',
packages=find_packages(),
package_data = {"PyQt5":["*.pyd","uic/widget-plugins/*.py"]},
include_package_data=True,
scripts=["sip.exe"],
#ext_modules=[Extension("sip.pyd", ["sip.pyd"])], # <- this isn't working
headers=["sip.h"],
classifiers=[
'Operating System :: Microsoft :: Windows',
'License :: OSI Approved :: GNU General Public License (GPL)',
],
)
我很清楚,这就是PyQt4安装程序包装的样子:
你可以看到,而不是放在$ _OUTDIR中,sip.pyd转到Lib \ site-packages。
答案 0 :(得分:0)
不可否认,这是一次黑客行为,但它为我们完成了工作。我们有基于平台的不同共享对象,并且没有能够在所有平台上构建它们的奢侈品。所以我们将它们保存在git repo中的编译形式中。
在setup.py文件中调用setup(...)
之后。
def copydir(source, dest):
for fname in os.listdir(source):
shutil.copy(os.path.join(source, fname), os.path.join(dest, fname))
if os.path.isfile('/etc/redhat-release') and platform.system() == "Linux":
copydir('redhat', 'modname')
elif platform.system() == "Windows":
copydir('windows', 'modname')
else:
copydir('debian', 'modname')