簡體   English   中英

如何從setuptools將文件安裝到站點軟件包(而不是軟件包子文件夾)?

[英]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安裝程序包裝的外觀: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM