一般问题: 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)',
],
)
Run Code Online (Sandbox Code Playgroud)
我很清楚,这就是PyQt4安装程序包装的样子:

您可以看到,而不是放入$ _OUTDIR,sip.pyd转到Lib\site-packages.
诚然,这是一个 hack,但它为我们完成了工作。我们有基于平台的不同共享对象,并且没有能力在所有平台上构建它们。因此我们将它们以编译的形式保存在 git 存储库中。
在调用setup(...)setup.py 文件后。
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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |