我正在编写一个Python包mypackage
,其中必须包含为Linux、Mac和Windows预编译的Fortran可执行二进制文件。我想将它们全部上传,但是当用户执行pip install my package
操作时,它应该只下载相关的二进制文件并将它们添加到$PATH中,这样我就可以稍后运行subprocess.call(bin1)
来调用二进制文件。
这个包裹看起来像
Project/
|-- bin/
| |-- mac/
| | |--bin1
| | |--bin2
| |-- windows/
| | |--bin1
| | |--bin2
| | |--dllfile_1
| | |--dllfile_2
| |-- linux/
| |--bin1
| |--bin2
|
|-- src/
| |
| |-- __init__.py
| |-- main.py
|
|-- setup.py
|-- README
在我的setup.py中,我尝试了以下方法:
import system
if system == 'Linux':
bin1 = 'bin/linux/bin1'
bin2 = 'bin/linux/bin2'
os='linux'
if system == 'Windows':
bin1 = 'bin/win/bin1.exe'
bin2 = 'bin/win/bin2.exe'
os='win'
if system == 'Darwin':
bin1 = 'bin/mac/bin1'
bin2 = 'bin/mac/bin2'
os='mac'
然后,如果在我的setuptools.setup()
中包含data_files = [('bin',[bin1,bin2])]
。当我从Mac上传软件包时,这似乎只在Mac上起作用,因为它只上传Mac二进制文件(总比什么都不上传好,但这还不够)。但是,我需要做一些类似data_files = [('bin',glob(f'{os}/*'))],
(包括win的dll文件)的事情,这似乎根本不起作用(即pip show -f my package
不包括任何二进制文件,而前一种情况是这样的)。解决这个问题的最佳方案是什么?我是否需要指定数据_文件中所有二进制文件的所有路径(如果需要,如何指定,因为glob()似乎不起作用),然后如何在pip install my package
上下载特定于操作系统的二进制文件(以及如果win的dll文件)
我发现与此类似的所有其他问题要么太不一样,要么不完全符合我的要求
目前没有回答
相关问题 更多 >
编程相关推荐