小编tha*_*ren的帖子

如何为Python pip生成的可执行文件的entry_points添加图标

我想在生成的可执行包装器中添加一个图标setuptools,例如安装via时pip install.如果可以,我如何将我的.ico添加到setup.py?如果不能直接用pip做,我只需要确认.我知道有用Python生成可执行文件的选项.

我的setup.py就是这样的

from setuptools import setup

setup(name='myapp',
    ...,
    entry_points={
        gui_scripts: ['myapp=myapp.start:gui']
        }
    )
Run Code Online (Sandbox Code Playgroud)

python windows pip

8
推荐指数
1
解决办法
193
查看次数

即使我的包包含已编译的库,轮名也是独立于平台的

我正在尝试为Windows生成特定于平台的二进制分发包,但会python setup.py bdist_wheel生成通用文件名.我需要在setup.py或其他方面更改以获得具有平台特定名称的轮子?从我收集的setuptools应该认识到什么时候包不会普遍,但这对我不起作用.

我正在开发的项目使用cmake和mingw w64编译了几个库的变体.这些编译库当然是32/64位特定的.为了创建单独的发行版,我为目标平台创建了一个virtualenv,我可以从中编译库.然后将编译好的库复制到python包中以进行轮转.

这是我的setup.py.pyfvs_files是要包含的已编译的'*.pyd'文件的列表.这会生成名为'pyfvs-0.0.1a0-py27-none-any.whl'的轮子,我希望它是'pyfvs-0.0.1a0-py27-none-win32.whl'和'pyfvs-0.0.1a0-py27 -none-win_amd64.whl".通过pip安装时,软件包的功能与目标平台的预期一致,但对于备用平台来说当然是失败的.最终,我想在Windows 32和64位以及linux 64位上支持Python 2.7,3.4,3.5.

import os
from glob import glob

from setuptools import setup
from setuptools.dist import Distribution

# TODO: Get the version from the git tag and or revision.
version = '0.0.1a0'

if os.name=='nt':
    so_ext = 'pyd'
else:
    so_ext = 'so'

pyfvs_files = glob('pyfvs/*.{}'.format(so_ext))
pyfvs_files.extend(['pyfvs/pyfvs.cfg',])

description = open('./README.txt').readline().strip()
long_desc = open('./README.txt').read().strip()

class BinaryDistribution(Distribution):
    def is_pure(self):
        return False

setup(
    name='pyfvs'
    , version=version
    , description=description
    , long_description=long_desc
    , url=''
    , author=""
    , author_email="" …
Run Code Online (Sandbox Code Playgroud)

python setuptools python-wheel

7
推荐指数
1
解决办法
856
查看次数

用MinGW SCons长命令行TEMPFILE

我正在尝试使用Windows上的SCons和MinGW从gcc和gfortran对象构建共享库,但在最后一个链接中,命令行太长,超过18000个字符.我知道我需要使用临时文件(响应文件?)来传递命令行,但我找不到让SCons直接执行此操作的方法.我在这个库中使用了CMake,它处理了响应文件,没有受到干扰.

SCons似乎使用CommandGeneratorAction生成共享库命令行.有没有办法告诉这个动作使用响应文件机制?还有另一种方法可以处理我忽略的长命令行吗?

相关的SConscript:

sqllib = env.SharedLibrary(target='fvssql', source=sqllib_sources, LIBS=['odbc32',])
ffelib = env.SharedLibrary(target='fvspncffe', source=ffelib_sources, LIBS=[sqllib,], LIBPATH=['.',])

fvsobjs = env.SharedObject(fvslib_sources)
fvsobjs = [obj for obj in fvsobjs if obj.get_suffix()=='.o']

fvslib = env.SharedLibrary(target='fvspnc', source=fvsobjs, LIBS=sqllib+ffelib, LIBPATH=['.',])
Run Code Online (Sandbox Code Playgroud)

env.Dump()的相关输出:

'SHLIBSUFFIX': '.dll',
'SHLINK': '$LINK',
'SHLINKCOM': <SCons.Action.CommandGeneratorAction object at 0x02DDF770>,
'SHLINKFLAGS': ['$LINKFLAGS', '-shared'],
Run Code Online (Sandbox Code Playgroud)

我可以在我的环境中准备命令行模板env['SHLINKCOM']="${TEMPFILE('$SHLINK -o $TARGET ... $SOURCE')}",但这看起来很脆弱,如果可能的话,我更愿意让SCons处理它.

我尝试使用字符串替换env['SHLINKCOM']='${TEMPFILE("%s")}' % (env['SHLINKCOM'],),但结果是一个不完整的命令行,现在无论如何响应文件.

编辑

我见过LongCmdLinesOnWin32解决方法.如果可能的话,我更愿意使用TEMPFILE,TempFileMunge,命令行间接机制.

python mingw scons

5
推荐指数
1
解决办法
1755
查看次数

标签 统计

python ×3

mingw ×1

pip ×1

python-wheel ×1

scons ×1

setuptools ×1

windows ×1