我有一个具有这种结构的项目:
SomeProject/
bin/
CHANGES.txt
docs/
LICENSE.txt
MANIFEST.in
README.txt
setup.py
someproject/
__init__.py
location.py
utils.py
static/
javascript/
somescript.js
Run Code Online (Sandbox Code Playgroud)
和一个“setup.py”如下:
#!/usr/bin/env python
import someproject
from os.path import exists
try:
from setuptools import setup, find_packages
except ImportError:
from distutils.core import setup, find_packages
setup(
name='django-some-project',
version=someproject.__version__,
maintainer='Some maintainer',
maintainer_email='some@manteiner.com',
packages=find_packages(),
include_package_data=True,
scripts=[],
url='https://github.com/xxx/some-project',
license='LICENSE',
description='Some project description.',
long_description=open('README.markdown').read() if exists("README.markdown") else "",
install_requires=[
"Django >= 1.4.0"
],
)
Run Code Online (Sandbox Code Playgroud)
然后,当我使用命令上传它时:
python setup.py sdist upload
Run Code Online (Sandbox Code Playgroud)
看起来没问题,但是包中没有包含此“javascript”子文件夹的“静态”文件夹。我的“setup.py”灵感来自具有类似结构的 github.com/maraujop/django-crispy-forms。关于上传此子文件夹有什么问题的任何提示?
我正在尝试使用 Pyinstaller 打包我的 Python 脚本。我的脚本导入了第三方模块 Exscript 和 Netaddr。当我尝试运行 Pyinstaller 生成的可执行文件时,出现以下错误。
我知道“pkg_resources”指的是 setuptools,但是我检查了并且我在 site-packages 下有 setuptools 18.2,我看到在脚本目录中很容易安装。我正在运行 Python 2.7。
任何有关让 Pyinstaller 工作的帮助表示赞赏。仅供参考,我确实在这里搜索并查看了类似的问题,但它们不适用于这个特定问题。
这是运行 Pyinstaller 的输出(我只包含错误):
C:\Python27\Lib\PyInstaller-2.1>pyinstaller c:\users\<username>\pycharmprojects\neworking2\network_login.py
5759 INFO: building because out00-Tree.toc missing or bad
5983 INFO: building because out01-Tree.toc missing or bad
7097 INFO: rebuilding out00-PYZ.toc because out00-PYZ.pyz is missing
9569 INFO: rebuilding out00-PKG.toc because out00-PKG.pkg is missing
9591 INFO: rebuilding out00-EXE.toc because network_login.exe missing
Run Code Online (Sandbox Code Playgroud)
执行 Pyinstaller 生成的 .exe 的输出:
C:\Python27\Lib\PyInstaller-2.1\network_login\dist\network_login>network_loginTraceback (most recent call last):
File "build\bdist.win32\egg\paramiko\__init__.py", line 30, in …
Run Code Online (Sandbox Code Playgroud) 我正在工作blowdrycss
。存储库在这里。
我希望将 的设置文件blowdrycss_settings.py
从 pypi 上的最终包中排除。目的是动态构建将放置在用户 virtualenv / 项目文件夹中的自定义设置文件。
在setup.py
,我有以下内容:
packages=find_packages(exclude=['blowdrycss_settings.py', ]),
Run Code Online (Sandbox Code Playgroud)
我也试过exclude_package_data:
exclude_package_data={
'': ['blowdrycss_settings.py'],
'': ['blowdrycss/blowdrycss_settings.py'],
'blowdrycss': ['blowdrycss_settings.py'],
},
Run Code Online (Sandbox Code Playgroud)
我然后跑python setup.py sdist bdist
。
但是,当我查看构建文件夹时,我仍然看到blowdrycss_settings.py
:
- build
- lib
- blowdrycss_settings.py
Run Code Online (Sandbox Code Playgroud)
似乎只排除一个文件应该很简单。
如何blowdrycss_settings.py
从分布式包中排除?
我对声明 Python 包要求的正确方法有些困惑。
未正式发布的新版本确实具有预发布名称,例如0.2.3.dev20160513165655
.
pip 在我们添加--pre
选项时安装预发布版本非常聪明,当我们构建开发分支时,我们确实使用它。主分支不使用它。
我发现如果我放入foobar>=0.2.3
需求文件,即使我指定了 --pre 参数,也不会选择开发版本。
该PIP文档是没有帮助这里太多,因为缺少约预发行点什么。
我使用了将foobar>0.2.2
which 与--pre
将安装预发行版结合使用的方法。
即使这个有点缺陷,因为如果我们发布一个像0.2.2.1
它这样的修补程序可能已经选择了它。
那么,处理这个问题的最佳方法是什么?
旁注:当我们发布版本(从开发到主的拉取请求)时,非常希望不必修补需求文件。请记住,develop 分支一直在使用--pre
,而 master 则没有。
是否可以从位于只读文件系统上的目录进行可编辑的 pip 安装?现在安装工具正在尝试将一个egg文件写入源目录:
$ pip install -e /tf/stuff/
Obtaining file:///tf/stuff
Complete output from command python setup.py egg_info:
running egg_info
writing requirements to src/stuff.egg-info/requires.txt
error: [Errno 30] Read-only file system: 'src/stuff.egg-info/requires.txt'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tf/stuff/
Run Code Online (Sandbox Code Playgroud)
文档说:
对于本地项目,“SomeProject.egg-info”目录是相对于项目路径创建的。与仅使用 setup.py develop 相比,这是一项优势,后者直接相对于当前工作目录创建“egg-info”。
我正在使用setuptools
打包自定义模块进行部署,该模块不应包含data/
用于开发的目录中的某些文件.我已经成功地recursive-exclude data/ *
在我的MANIFEST.in
文件中排除了必要的文件,但我也看到我可以通过这样做prune data/
这两种方法都可以package.egg-info/SOURCES.txt
在打包后从中删除目标文件python setup.py egg_info
这两者有什么区别吗?
我正在使用 setuptools 打包代码,以便可以使用
cd project_name && pip install .
Run Code Online (Sandbox Code Playgroud)
在安装过程中,我想警告用户有关预先存在的配置文件并在系统上打印一些安装后说明。例如
/etc/project_name/project.conf exists. Not copying default config file.
Run Code Online (Sandbox Code Playgroud)
我尝试使用print
,logging.warning()
但在使用 pip 安装时仍然没有出现警告。我有一种感觉,我错过了一些明显的东西。
我们正在尝试在 Redhat 系列上支持 3.0 > python >= 2.6 >= el6 和 Ubuntu >= 14.04LTS
我构建了一个定义setuptools
入口点的python应用程序(“主机”应用程序),以便可以对其进行扩展。然后,插件作者必须将以下内容添加到他们的setup.py
文件中:
setup(
# ...
entry_points = {
'myapp.plugins':
['plugin_1 = <foo.plugin.module>:<plugin-install-func>']
}
)
Run Code Online (Sandbox Code Playgroud)
为了测试我的设置,我必须
pip
安装它,sys.path
并调用pkg_resources.working_set.add_entry(package_dir)
[*],pip
卸载软件包,以及sys.path
,如果必须验证不同的功能,则每个测试用例都需要一个单独的程序包。
整个测试平台相当冗长和笨拙。
有没有更优雅的方式为setuptools
入口点插件编写测试用例?
[*]注:安装轮子或使用PIP *在发展模式与pip install -e <plugin-package>
不会激活插件在同一个翻译上的Linux ; 或至少没有在之后附加package文件夹sys.path
。在Windows上,以上问题仅在开发模式下存在。
我真的在使用RedHat 6.9系统的pip上挣扎.我每次尝试使用pip时都得到了
ImportError: No module named sysconfig
Run Code Online (Sandbox Code Playgroud)
我尝试使用Google搜索解决方案.我没有apt-get,似乎无法用yum获取它,所以清除setuptools是不可能的.我尽我所能手动删除setuptools所以我可以重新安装它们,但是yum确信机器上仍然有setuptools.
几乎所有涉及用yum下载东西的建议对我都不起作用.百胜总是说它无法找到我想要的东西.因此,如果有一种方法可以下载没有yum或apt-get的东西(例如,不通过终端),那可能是最好的.
我的机器上有Python 3和Python 2,所以我不知道这是否会改变你们给我的建议.
1000感谢任何可以提供帮助的人!现在我只能通过anaconda接口(例如Jupyter笔记本和Spyder)完成任务,这是非常有限的.
编辑:这是我的错误跟踪:
Traceback (most recent call last):
File "/usr/bin/pip2", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 947, in <module>
class Environment(object):
File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 951, in Environment
self, search_path=None, platform=get_supported_platform(),
File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 180, in get_supported_platform
plat = get_build_platform()
File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 380, in get_build_platform
from sysconfig import get_platform
ImportError: No module named sysconfig
Run Code Online (Sandbox Code Playgroud)
编辑2: @hoefling要求我发布以下命令的输出; 第一:
$ yum list installed | grep …
Run Code Online (Sandbox Code Playgroud) 假设我有一个简单的库,它使用setuptools进行打包和分发。在这种情况下,库还需要最低版本的 Python 3.6,这意味着我的 setup.py 将如下所示:
from setuptools import setup, find_packages
setup(
name='something',
version='0.0.1',
description='description',
long_description=long_description,
# More metadata
packages=find_packages(exclude=['tests', 'docs']),
python_requires='>=3.6'
)
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时python setup.py bdist_wheel
,我得到一个名为something-0.0.1-py3-none-any.whl
. 在这里很明显,python_requires
在setuptools
确定我的轮子的 Python 标签时,wheel 忽略了选项(它应该是py36
但默认的py3
)。显然,我意识到我可以--python-tag py36
从命令行传入,这将完成这项工作,但是我用于部署我的库的持续部署服务只接受我正在使用的发行版的名称 ( bdist_wheel
)。因此,我无法传递任何命令行参数。
经过一番研究,我发现我可以从bdist_wheel
类继承并覆盖python_tag
成员变量,但是根据wheel README:
应该注意的是,wheel不打算用作库,因此没有稳定的公共 API。
因此,我想避免从bdist_wheel
类继承,这可能会迫使我在每次发生重大更改时重写我的类。
有没有其他方法可以通过 setuptools 传递轮子的 Python 标签?
setuptools ×10
python ×9
pip ×4
distutils ×2
pypi ×2
setup.py ×2
distribute ×1
django ×1
egg ×1
manifest ×1
package ×1
plugins ×1
pyinstaller ×1
python-2.7 ×1
python-wheel ×1
testng ×1
yum ×1