我正在构建一个使用PyQt的小应用程序,并且很高兴在setup.py中声明该依赖项.
然而,根据这个博客(谷歌首次点击pyqt setuptools)说它无法完成,而且这里的最后一段也没有尝试去做.
更新:
显而易见的install_requires = [ 'pyqt >= 0.7' ]是setup.py:
D:\3rd\BuildBotIcon\my-buildboticon\python>setup.py test
running test
install_dir .
Checking .pth file support in .
C:\Python26-32\pythonw.exe -E -c pass
Searching for pyqt>=4.7
Reading http://pypi.python.org/simple/pyqt/
Reading http://www.riverbankcomputing.com/software/pyqt/
Reading http://www.riverbankcomputing.com/software/pyqt/download
No local packages or download links found for pyqt>=4.7
error: Could not find suitable distribution for Requirement.parse('pyqt>=4.7')
Run Code Online (Sandbox Code Playgroud) 如果我从easy_install安装了软件包,则会sys.path在PYTHONPATH变量中的项之前添加egg .
例如,如果我在当前目录中安装了一个名为foo的egg包以及一个名为foo的包,那么执行以下操作:
PYTHONPATH="." python
>>> import foo
Run Code Online (Sandbox Code Playgroud)
这将使用egg版本foo而不是本地目录.检查sys.path显示鸡蛋放在物品之前PYTHONPATH.这似乎破了.有没有办法覆盖这种行为?
Python有能力通过运行它的setup.py脚本来"伪装"一个包develop而不是install.这会修改python环境,因此可以从它的当前位置导入包(它不会被复制到site-package目录中).这允许开发其他包使用的包:源代码被修改到位,并且通过简单的更改可用于其余的python代码import.
一切正常,除了该setup.py develop命令创建一个.egg-info文件夹与元数据相同的文件夹setup.py.混合源代码和临时文件不是一个好主意 - 需要将此文件夹添加到从vcs和结束备份系统开始的多个工具的"忽略"列表中.
是否可以使用setup.py develop但.egg-info在其他地方创建目录,因此原始源代码不会受到临时目录和文件的污染?
我用setuptools0.6来打包我的代码.默认情况下,当我键入时python setup.py sdist,该工具会直接在我的脚本的同一文件夹中创建一个文件夹dist.我可以做些什么来改变这个默认文件夹?编辑:另一个问题是,如果我的安装脚本和我的包文件夹不在同一个文件夹中,我该怎么做才能指定包的确切路径?谢谢
我是python中的新手.
有人可以回答__requires__以下代码中的含义吗?他们为什么要放在__requires__ = 'flower==0.4.0'文件的开头?
#!/srv/virtualenvs/zeusenv/bin/python
__requires__ = 'flower==0.4.0'
import sys
from pkg_resources import load_entry_point
sys.exit(
load_entry_point('flower==0.4.0', 'console_scripts', 'flower')()
)
Run Code Online (Sandbox Code Playgroud) 我正在编写一个可重用的Django应用程序,如下所述:https: //django.readthedocs.org/en/1.5.x/intro/reusable-apps.html
当我在setup.py中指定包含名称中包含破折号的要求时,setup.py将不会运行.例如,如果我的setup.py包含以下行:
requires=[ 'djangotinymce', 'MtFileUtil', 'Django', 'PyYAML', ],
Run Code Online (Sandbox Code Playgroud)
然后它正常工作.
python ./setup.py sdist
running sdist
...
Creating tar archive
Run Code Online (Sandbox Code Playgroud)
如果我将行更改为如下所示:
requires=[ 'django-tinymce', 'MtFileUtil', 'Django', 'PyYAML', ],
Run Code Online (Sandbox Code Playgroud)
我们得到一个奇怪的错误
Traceback (most recent call last):
File "./setup.py", line 32, in <module>
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
File "/usr/lib/python2.7/distutils/core.py", line 112, in setup
_setup_distribution = dist = klass(attrs)
File "/home/travis/venv/deleteme/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg/setuptools/dist.py", line 225, in __init__
_Distribution.__init__(self,attrs)
File "/usr/lib/python2.7/distutils/dist.py", line 259, in __init__
getattr(self.metadata, "set_" + key)(val)
File "/usr/lib/python2.7/distutils/dist.py", line 1220, …Run Code Online (Sandbox Code Playgroud) 我正在使用两个具有相同名称的python包.
是否有规范或pythonic方式来处理安装两个名称冲突的包?到目前为止,我只是偶尔需要在开发/构建期间使用其中一个软件包,所以我一直在使用一个单独的virtualenv来处理冲突,但它使构建步骤更复杂,我想知道是否没有更好的方法来处理它.
是否setuptools允许.pypirc在自定义位置指定文件而不是$HOME/.pypirc?我正在设置jenkins作业以发布到内部存储库,并希望该.pypirc文件位于作业的工作区内.
我正在使用入口点开发一个带插件的松散机器人.我想在运行时动态添加插件.
我有一个这种结构的项目:
+ ~/my_project_dir/
+ my_projects_python_code/
+ plugins/
- plugin1.py
- plugin2.py
- ...
- pluginN.py
- setup.py
- venv/
- install.sh
Run Code Online (Sandbox Code Playgroud)
我的setup.py文件看起来像这样:
from setuptools import setup, find_packages
setup(
name="My_Project_plugins",
version="1.0",
packages=['plugins'],
entry_points="""
[my_project.plugins]
plugin1 = plugins.plugin1:plugin1_class
plugin2 = plugins.plugin2:plugin2_class
...
pluginN = plugins.pluginN:pluginN_class
"""
)
Run Code Online (Sandbox Code Playgroud)
运行sudo install.sh执行以下操作:
将所需文件复制到 /usr/share/my_project_dir/
激活virtualenv at /usr/share/my_project_dir/venv/bin/activate
跑: python setup.py develop
这按预期工作,并正确设置我的入口点,以便我可以通过机器人使用它们.
但我希望能够setup.py在机器人运行时添加插件并能够使用它.所以我想添加一行:pluginN+1 = plugins.pluginN+1:pluginN+1_class并且可以使用pluginN + 1.
我尝试/学到了什么:
在/usr/share/my_project_dir/venv/bin/activate我打开一个Python交互式shell并迭代之后pkg_resources.iter_entry_points(),它列出了从setup.py的初始状态加载的所有东西(即plugin1到pluginN)
如果我添加一行setup.py并 …
如何下载发行版,可能是 sdist,而不可能执行setup.py文件(可能包含恶意代码)?
我不想递归获取依赖项,只为指定的发行版下载一个文件。尝试不起作用:
pip download --no-deps mydist
Run Code Online (Sandbox Code Playgroud)
这是一个可重现的示例,演示了setup.py在上述情况下仍然执行:
pip download --no-deps mydist
Run Code Online (Sandbox Code Playgroud)
我不能使用--no-binary选项,因为我不想排除源分发。我只是想避免执行他们的源代码。
setuptools ×10
python ×9
distutils ×3
pypi ×2
alembic ×1
directory ×1
distribute ×1
django ×1
easy-install ×1
entry-point ×1
jenkins ×1
namespaces ×1
packaging ×1
pip ×1
plugins ×1
pyqt ×1