[英]How do you install a file to site-packages (not package sub-folder) from setuptools?
常規問題: setuptools中是否可以在prefix \\ Lib \\ site-packages目錄中安裝dll?
我的特定需求: PyQt5沒有為Python2.7提供二進制安裝程序,因此我是從源代碼構建的,為了方便起見,我希望將結果打包。 官方安裝程序將sip.pyd放在prefix \\ Lib \\ site-packages中,我希望保持一致。 但我不確定如何。 看來我可以使用py_modules或ext_modules並定義我要將模塊放到哪里,但是我不知道如何使用.pyd文件來實現這兩個功能。
我擔心Windows,但我認為如果有setuptools解決方案,它將與平台無關。 如果有問題,我正在嘗試將其部署為wheel(.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安裝程序包裝的外觀:
您可以看到sip.pyd而不是放在$ _OUTDIR中,而是轉到Lib \\ site-packages。
誠然,這是一個hack,但是它可以為我們完成工作。 我們基於平台有不同的共享對象,並且不能在所有平台上構建它們。 因此,我們將它們以編譯形式保存在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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.