我正在制作一个setup.py
使用setuptools 安装文件的Python包.
该软件包包含一个GUI,当它安装在Windows机器上时,我希望安装在开始菜单的"程序"中创建一个文件夹,并在那里创建一个快捷方式来pyw
启动GUI.(pyw
思考适用于所有平台,对吧?)
在Mac和Linux上,我希望将这个快捷方式放在与开始菜单并行的Mac和Linux中.
我该怎么做呢?
使用setuptools
Python,我可以在安装python项目时指定输出目录吗?
在我的项目目录中:
python setup.py install
我想将项目安装到/usr/share/myproject/
目录中,例如.
我不想在命令行中指定输出目录.我想将此输出目录指定为setup.py
.
我创建了一个自定义paster命令,如http://pythonpaste.org/script/developer.html#what-do-commands-look-like中所述.在我的setup.py中,我已经定义了这样的入口点:
entry_points={
'paste.global_paster_command' : [
'xxx_new = xxxconf.main:NewXxx'
]
}
Run Code Online (Sandbox Code Playgroud)
我在激活的virtualenv里面,并通过安装我的包
python setup.py develop
Run Code Online (Sandbox Code Playgroud)
如果我paster
在我的包文件夹中运行,我会看到我的自定义命令,我可以通过它运行它paster xxx ...
.但是,如果我离开我的包文件夹paster
不再显示我的命令.我查了一下which paster
,这是我的virtualenv的版本.我也启动了一个python解释器并导入xxxconf
,它工作正常.
当我在我的包文件夹之外时,我不知道为什么我的全局命令无法识别!?
我正在尝试解决的情况是从bitbucket上的私有存储库安装一个包,它有自己对bitbucket中另一个私有存储库的依赖.
我用它来启动安装:
pip install -e git+https://bitbucket.org/myuser/project-one.git/master#egg=django_one
Run Code Online (Sandbox Code Playgroud)
然后尝试从setup.py下载它的依赖项,如下所示:
install_requires = ['project-two',],
dependency_links = ['git+https://bitbucket.org/myuser/project-two.git/master#egg=project_two'],
Run Code Online (Sandbox Code Playgroud)
这失败了,pip日志看起来像:
Downloading/unpacking project-two (from project-one)
Getting page https://pypi.python.org/simple/project-two/
Could not fetch URL https://pypi.python.org/simple/project-two/: HTTP Error 404: Not Found (project-two does not have any releases)
Will skip URL https://pypi.python.org/simple/project-two/ when looking for download links for project-two (from project-one)
Getting page https://pypi.python.org/simple/
URLs to search for versions for project-two (from project-one):
* https://pypi.python.org/simple/project-two/
* git+https://bitbucket.org/myuser/project-two.git/master#egg=project-two
Getting page https://pypi.python.org/simple/project-two/
Cannot look at git URL git+https://bitbucket.org/myuser/project-two.git/master#egg=project-two
Could not fetch URL https://pypi.python.org/simple/project-two/: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用自制软件更新setuptools,但我不断收到错误消息:
OSError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/setuptools-1.1.3-py2.7.egg'
Run Code Online (Sandbox Code Playgroud)
如何允许我的计算机对该文件进行更改,以便更新setuptools?
我一直致力于为响应库添加Python 3.5类型提示.但是当我测试制作发行版时,sdist
或者bdist_wheel
它没有安装我的.pyi
文件.我可以看到它是分发的一部分,但它不会比这更进一步.
你可以在这里看到我在我的回购中得到的东西:https://github.com/gaqzi/responses/tree/feature/type-hints-file
我读过PEP484,它提到存根文件应该是可分发的.但我似乎无法弄清楚如何.:)
是否有问题,因为响应不会创建包?它只是一个模块文件,这就是为什么它没有正确添加?
我在构建软件包时看到的内容:
% python setup.py sdist
running sdist
running egg_info
writing requirements to responses.egg-info/requires.txt
writing top-level names to responses.egg-info/top_level.txt
writing responses.egg-info/PKG-INFO
writing dependency_links to responses.egg-info/dependency_links.txt
reading manifest file 'responses.egg-info/SOURCES.txt'
writing manifest file 'responses.egg-info/SOURCES.txt'
running check
warning: check: missing meta-data: if 'author' supplied, 'author_email' must be supplied too
creating responses-0.6.0
creating responses-0.6.0/responses.egg-info
making hard links in responses-0.6.0...
hard linking README.rst -> responses-0.6.0
hard linking responses.py -> …
Run Code Online (Sandbox Code Playgroud) 我发现多个来源(https://docs.python.org/3/distutils/sourcedist.html#specifying-the-files-to-distribute,http://blog.ionelmc.ro/2014/05/25/Python的包装/,http://blog.ionelmc.ro/2014/06/25/python-packaging-pitfalls/),其建议,要在Python软件包分发数据文件的方法是使用setuptools的的include_package_data
选项和MANIFEST.in
.我的包中的文件看起来像,
setup.py
setup(
# ...
include_package_data = True,
# ...
与文件的其余部分(希望无关紧要)省略.
MANIFEST.IN
graft testdata
include ChangeLog
include README.rst
include COPYING
include COPYING.LESSER
include tox.ini
当我setup.py install
在virtualenv中运行或使用pip时,我最终得到了Python源文件本身,但没有testdata/
任何地方我可以找到它.我认为这是我的包装中的一个错误,除了当我抓住另一个具有类似布局的包时,我也找不到数据文件.如果我克隆示例包https://github.com/ionelmc/python-nameless的存储库并使用它安装它setup.py install
,则该软件包将安装在该目录中lib/python3.4/site-packages/nameless-0.1.0-py3.4.egg/nameless/
.但是,我无法在virtualenv中的任何地方找到任何数据文件或测试.他们应该在哪里结束?这应该怎么样?
我提出这个问题的动机是项目的另一个贡献者想要从pip安装运行需要数据文件的测试.这首先是正确的做法吗?
我在尝试使用Pyinstaller时遇到错误.在做了一些研究后,我认为错误是由最新版本的setuptools(19.3)中的错误引起的.修复程序似乎降级为setuptools版本19.2.我的问题是降级本身.我的问题是如何在Ubuntu 15.04中降级安装工具?
我为使用模块(https://luarocks.org/)管理软件包的系统编写了小型python 软件包。对于那些不了解它的人,可以运行module load x
并运行一个小的脚本来修改各种环境变量以使软件“ x”正常工作,然后可以使用撤消该操作module unload x
。
这种软件管理方法在科学计算中几乎无处不在,并且在该领域具有很大的价值:您可以将古老的未维护软件与该软件可能会干扰的软件包一起运行,可以运行多个版本的软件,从而使自己的产品再现。准确地记录数据(您可以返回到旧版本),并且可以运行具有过时依赖关系的坦率地编写未更新的软件。
这些功能很棒,但是它们在python 2/3 split中造成了问题:
如果您想编写一个同时适用于python 2和3 的软件包并将其与需要 python 2或3的软件一起使用怎么办?
使旧的python2依赖软件在这些大型系统上工作的方式是,您制作了python / 2.7.x模块和python / 3.5模块。当您要运行使用python 2的脚本时,请加载该模块等。
但是,我想编写一个可以在两种环境下都可以使用的python软件包,因为无论使用哪种python解释器,我都希望该软件处于活动状态。
从根本上讲,这非常容易:只需使用#!/usr/bin/env python
shebang线就可以了。这样可行。我编写了所有软件都可以使用,所以没有问题。
问题是:我想使用setuptools将我的软件包分发给处于相同情况的其他科学家,而setup工具会破坏shebang线。
我不想就修改shebang线是否是一个好主意展开辩论,我相信这是因为它已经在同一状态下存在多年了。老实说,我不在乎,这对我不起作用。默认的setuptools安装会导致软件无法运行,因为当未加载python解释器的模块时,该python解释器将无法运行,这PYTHONPATH
是完全错误的。
如果我所有的用户都具有root用户访问权限,则可以使用该data_files
选项将脚本复制到/usr/bin
,但这对兼容性不是一个好主意,而且我的用户也没有root用户访问权限,因此这是一个有争议的问题。
到目前为止,我尝试过的事情:
我尝试设置sys.executable
到/usr/bin/env python
中setup.py
文件,但不起作用,因为那时家当是:#!"/usr/bin/env python"
,这显然是行不通的。
我在以下问题中尝试了“不要触碰我的shebang类”想法:不要触碰我的shebang!(这是最低的答案,票数为0)。那也不起作用,可能是因为它是为distutils而不是setuptools编写的。再加上这个问题已有6年历史了。
我还看了这些问题:
Setuptools entry_points / console_scripts在shebang中具有特定的Python版本
那里描述的方法不起作用,shebang线仍被更改。
创建一个setup.cfg
包含以下内容的文件:
[build]
executable = /usr/bin/env python
Run Code Online (Sandbox Code Playgroud)
也不会改变shebang行的行为。 …
如何构建包含'.so'文件的.egg文件?
这是我的文件树:
--setup.py
--__init__.py
--mcpack.py`
--mcpack.so
如何在其中创建包含mcpack.so的包?
我试过使用pack_data
,结果是.so文件打包但在python文件中找不到.
python ×10
setuptools ×10
pip ×2
dependencies ×1
distutils ×1
homebrew ×1
installation ×1
linux ×1
paster ×1
pyinstaller ×1