所述扭曲扩展系统 是写扩展的扭曲应用的首选方式.
但是,由于插件系统的结构方式(插件进入一个不应该是Python包的twisted/plugins目录),编写适当的setup.py来安装这些插件似乎并非易事.
我已经看到一些尝试将'twisted.plugins'添加到distutils setup命令的'packages'键,但由于它不是真正的包,所以会发生不好的事情(例如,__init__.py某些工具有助于添加).
其他尝试似乎使用'package_data'(例如,http://bazaar.launchpad.net/~glyph/divmod.org/trunk/view/head: /Epsilon/epsilon/setuphelper.py),但这也可能失败以奇怪的方式.
问题是:有没有人成功编写过setup.py来安装扭曲的插件,它适用于所有情况?
命名空间包的主题似乎对于初学者来说有点混乱,并且它的先前版本的Python以几种不同的方式实现它或者StackOverflow上的许多问答都是过时的并没有帮助.我正在寻找Python 3.5或以后的解决方案.
我正在将一堆Python代码重构为模块和子模块,并且努力使这些项目中的每一个都设置为在坐在同一名称空间中时彼此独立地运行.
我们最终将使用内部PyPi服务器,将这些软件包提供给我们的内部网络,并且不希望将它们与外部(公共)PyPi软件包混淆.
示例: 我有2个模块,我希望能够执行以下操作:
from org.client.client1 import mod1
from org.common import config
Run Code Online (Sandbox Code Playgroud)
反映的模块将分开:
存储库1:
org_client_client1_mod1/
setup.py
mod1/
__init__.py
somefile.py
Run Code Online (Sandbox Code Playgroud)
存储库2:
org_common_config/
setup.py
config/
__init__.py
someotherfile.py
Run Code Online (Sandbox Code Playgroud)
我的Git仓库已经设置为org_client_client1_mod1和org_common_config,所以我只需要在包装和执行安装__init__.py文件,我相信.
随着
__init__.py,我应该使用哪些(如果有的话)?:Run Code Online (Sandbox Code Playgroud)from pkgutil import extend_path __path__ = extend_path(__path__, __name__)要么:
Run Code Online (Sandbox Code Playgroud)import pkg_resources pkg_resources.declare_namespace(__name__)
有
setup.py,我还需要添加namespace_modules参数,如果是,我会使用namespace_modules=['org.common'],还是namespace_modules=['org', 'common']?
我可以通过以某种方式实现这一点而放弃以上所有内容吗?也许是更简单或更"pythonic"的东西?
我维护了一些Python包.我有一个非常相似的setup.py文件.但是,在做的时候setup.py install,我的一个软件包被安装为一个鸡蛋,而其他软件包被安装为"鸡蛋文件夹",即扩展名为"egg"的文件夹.
它们之间有什么区别导致这种不同的行为?
我在Windows上使用python 2.7.当我尝试使用[setuptools] [2]的easy_install安装[lxml] [1]时,怎么会出现以下错误?
C:\>easy_install lxml
Searching for lxml
Reading http://pypi.python.org/simple/lxml/
Reading http://codespeak.net/lxml
Best match: lxml 2.3.3
Downloading http://lxml.de/files/lxml-2.3.3.tgz
Processing lxml-2.3.3.tgz
Running lxml-2.3.3\setup.py -q bdist_egg --dist-dir c:\users\my_user\appdata\local\temp\easy_install-mtrdj2\lxml-2.3.3\egg-dist-tmp-tq8rx4
Building lxml version 2.3.3.
Building without Cython.
ERROR: 'xslt-config' is not recognized as an internal or external command,
operable program or batch file.
** make sure the development packages of libxml2 and libxslt are installed **
Using build configuration of libxslt
warning: no files found matching 'lxml.etree.c' under directory 'src\lxml'
warning: no files …Run Code Online (Sandbox Code Playgroud) 在最新版本的setuptools中,该python setup.py install命令已被弃用(有关更多信息,请参阅https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html )。
(venv) [jon@dev02 py38]$ python setup.py install
running install
/home/jon/.jenkins/workspace/Farm_revision_linux_py36/TOXENV/py38/venv/lib64/python3.8/site-
packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is
deprecated. Use build and pip and other standards-based tools.
warnings.warn(
/home/jon/.jenkins/workspace/Farm_revision_linux_py36/TOXENV/py38/venv/lib64/python3.8/site-
packages/setuptools/command/easy_install.py:156: EasyInstallDeprecationWarning: easy_install
command is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
running bdist_egg
running egg_info
... etc
Run Code Online (Sandbox Code Playgroud)
建议您只pip install .从源代码安装包,但这不会编译任何 Cython 代码。执行此操作的最佳方法是什么?
Cython文档仍然建议使用setup.py,但我找不到任何更好的建议。看来开发人员安装(pip install -e .)确实编译了 Cython 文件,或者您可以python setup.py build_ext --inplace在运行后进行编译pip install …
我用C++编写了一个Python扩展模块.我打算用setuptools分发模块.将有用于32位和64位Windows(内置setup.py bdist_egg)的二进制发行版和用于类UNIX平台(内置setup.py sdist)的源代码发行版.
我打算根据BSD许可证授权该模块.在我的源代码树中,文件LICENSE.txt与setup.py一起位于顶层文件夹中.我应该如何将其包含在安装包中?
我尝试了以下setup.py脚本:
from setuptools import setup, Extension
from glob import glob
setup(
name = 'Foo',
version = '0.1.0',
ext_modules = [Extension('Foo', glob('Source/*.cpp'))],
package_data = {'': ['LICENSE.txt']}
)
Run Code Online (Sandbox Code Playgroud)
它不起作用,许可证文件不包含在安装包中.也许是因为setup.py文件没有定义任何包,只有一个扩展模块.
我该如何解决?
这是一个类似的问题我如何让setuptools安装一个不在PyPI上的软件包?但不一样.
由于我想使用某些包的分叉版本,setuptools会忽略依赖关系链接(因为它具有相同的版本号).
有没有办法强制使用dependency_links中的链接?或者是更改分叉回购中版本号的唯一方法?
requires = [
...
'pyScss==1.1.3'
...
dependencies = [
'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3'
]
Run Code Online (Sandbox Code Playgroud)
更新
奇怪的是,如果这个包是所需列表中唯一尚未安装的包,显然它可以工作.如果有另一个丢失的包,它将从pypi下载它.
我正在编写一个使用py.test进行测试的python程序,现在一个测试也取决于numpy.在我的setup.py中我应该添加这些依赖项?
目前我的setup.py的相关部分看起来像这样:
[...]
'version': '0.0.1',
'install_requires': [],
'tests_require': ['pytest'],
'cmdclass': {'test': PyTest},
'extras_require': {
'testing': ['pytest'],
},
[...]
Run Code Online (Sandbox Code Playgroud)
有pytest两次感觉已经有点奇怪,我不知道在哪里添加numpy.
我怎么能包括package_data为sdist没有MANIFEST.in文件?
我的setup.py看起来像这样:
import setuptools
setuptools.setup(
name='foo',
version='2015.3',
license='commercial',
packages=setuptools.find_packages(),
package_data={'': ['foo/bar.txt']},
)
Run Code Online (Sandbox Code Playgroud)
版本:
user@host> python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
>>> import setuptools
>>> setuptools.version.__version__
'3.6'
Run Code Online (Sandbox Code Playgroud)
我只是不能被foo/bar.txt包括在内.
或者这篇博文仍然是真的吗? http://blog.codekills.net/2011/07/15/lies,-more-lies-and-python-packaging-documentation-on--package_data-/
然而,在过去的一小时里,我了解到这些陈述介于"危险的误导"和"该死的谎言"之间.这是因为Python包的主要类型是源包,而创建源包的规范方法是使用setup.py sdist.但是,package_data中指定的数据不包含在源代码分发中 - 它们仅包含在binary(setup.py bdist)发行版和installs(setup.py install)中.
我怎么能包括package_data为sdist没有MANIFEST.in文件?
我正在setup.py为一个带有一些Cython扩展模块的项目创建一个文件.
我已经让这个工作了:
from setuptools import setup, Extension
from Cython.Build import cythonize
setup(
name=...,
...,
ext_modules=cythonize([ ... ]),
)
Run Code Online (Sandbox Code Playgroud)
安装很好.但是,这假设已安装Cython.如果没有安装怎么办?我知道这是setup_requires参数的用途:
from setuptools import setup, Extension
from Cython.Build import cythonize
setup(
name=...,
...,
setup_requires=['Cython'],
...,
ext_modules=cythonize([ ... ]),
)
Run Code Online (Sandbox Code Playgroud)
但是,如果尚未安装Cython,这当然会失败:
$ python setup.py install
Traceback (most recent call last):
File "setup.py", line 2, in <module>
from Cython.Build import cythonize
ImportError: No module named Cython.Build
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?我Cython只setup_requires需要Cython在步骤运行后以某种方式导入,但我需要为了指定ext_modules值.
python ×10
setuptools ×10
cython ×2
distutils ×2
easy-install ×2
packaging ×2
setup.py ×2
build ×1
distribute ×1
egg ×1
lxml ×1
manifest ×1
pip ×1
pypi ×1
python-2.7 ×1
python-3.x ×1
twisted ×1