我是distutils的新手,我有一个问题,真的让我陷入困境.我正在编译一个需要扩展的包,所以我这样做了扩展:
a_module = Extension(
"amodule",
["initmodule.cpp"],
library_dirs=libdirs,
extra_objects = [
"unix/x86_64/lib/liba.so"
"unix/x86_64/lib/lib.so",
"unix/x86_64/lib/libc.so"],
)
Run Code Online (Sandbox Code Playgroud)
然后我运行安装方法:
setup(name="apackage", version="7.2",
package_dir = {'':instdir+'/a/b/python'},
packages=['apackage','package.tests'],
ext_modules=[hoc_module]
)
Run Code Online (Sandbox Code Playgroud)
包分发是正确的,我可以"python setup.py安装"罚款,但当我尝试导入我的包时,我收到一个错误
ImportError: liba.so.0: cannot open shared object file: No such file or directory
我意识到当我将liba.so.0的位置添加到我的LD_LIBRARY_PATH时,程序运行正常.不幸的是,我没有编写这些模块,也没有很好地理解编译.我一直试图解决这个问题几天无济于事.
更新:我尝试将liba.a,libb.a等文件传递给extra_objects,但这不起作用,生成以下错误:liba.a:无法读取符号:错误值collect2:ld返回1退出状态.我正在尝试做的是打包一个python模块,它需要编译一个库本身依赖于我需要以某种方式包含在包中的其他库.我怀疑我的问题非常类似于这个:http:/ /mail.python.org/pipermail/distutils-sig/2009-February/010960.html但那个问题没有得到解决,我想也许已经有两年了,已经找到了解决方案?
更新2:现在我通过这样做解决了这个问题:
data_files=[('/usr/local/lib', glob.glob('unix/x86_64/lib/*'))]
Run Code Online (Sandbox Code Playgroud)
也就是说,我正在将我需要的库复制到/ usr/local/lib中.我对这个解决方案并不是非常满意,尤其是因为它要求我的用户拥有root权限,并且因为这可能仍然无法使用Redhat发行版.所以,如果有人能提出比这个修复更好的建议,请告诉我.
python packaging software-distribution distutils distribution
作为Linux发行版中的下游维护者,我通常维护的一些软件包开始在其代码库中使用C++ 11特性.所有这些都依赖于Linux发行版打包的不同库.
将C++ 11代码与C++ 98和AFAIK混合时,可能会出现ABI问题,当编译软件生成包时,大多数当前主要的Linux发行版都默认不启用C++ 11标志.
问题是:主要的Linux发行版如何处理C++ 11代码的输入?在使用系统库时,是否有一种可靠的方法来检查或避免ABI的这些问题?
谢谢.
我正在研究一个多模块Maven项目,其结构如下:
war-module
jar-module
Run Code Online (Sandbox Code Playgroud)
war-module依赖于jar模块,并在打包后将jar工件添加到webapp的lib目录中.
war-module和jar-module都使用Apache log4j进行日志记录,并共享同一个log4j配置文件(log4j.xml),该文件目前位于jar-module项目中.并且这个log4j.xml将被打包到jar-module.jar文件中,但是,我想把它放到war包中的WEB-INF/classes目录而不是jar文件中,以便用户很容易找到这个配置文件并在必要时进行修改(如果此文件位于WEB-INF/lib/jar-module.jar中,则很难找到它,因为该目录下有许多其他jar).
我的问题是:Maven解决这个问题的方法是什么?
更新:
我的真实项目有点复杂,而且还有一个依赖于jar模块的ear-module(也就是说.jar-module可以在几个不同的项目中独立使用,而且我不能把文件置于战争中 - module/src/main/resources目录来解决这个问题).我不希望在几个项目中复制一些配置文件,如log4j.xml(以及其他配置文件,如myapp.properties).
我希望在接下来的几天内打包并上传一个我有PyPI的库,但是我对我的命名空间方法有点不确定.
我有一些其他不相关的项目采用类似的方法,并希望给它们所有相同的命名空间.例如:
abc.seoabc.ajaxabc.ecommerce问题是我不确定两个独立的包(例如鸡蛋)是否可能与同一个父命名空间共存.这种方法有问题,还是有办法绕过它?什么是最好的方法?
这些库不应该打包在一起,它们太不相关了.我希望在上传之前能够正确使用它,以避免在进行"官方"发布后出现令人痛苦的命名空间更改.
(NB abc不是真名,我希望我的问题免于广告)
UPDATE
我选择了以下内容,以便在没有安装setuptools的情况下对人们友善:
try:
__import__('pkg_resources').declare_namespace(__name__)
except ImportError:
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
Run Code Online (Sandbox Code Playgroud)
具体如下setup.py:
setup(
...
namespace_packages = ['rollyourown'],
...
Run Code Online (Sandbox Code Playgroud) 我用setuptools0.6来打包我的代码.默认情况下,当我键入时python setup.py sdist,该工具会直接在我的脚本的同一文件夹中创建一个文件夹dist.我可以做些什么来改变这个默认文件夹?编辑:另一个问题是,如果我的安装脚本和我的包文件夹不在同一个文件夹中,我该怎么做才能指定包的确切路径?谢谢
现在我正在使用Pyinstaller.我有一个脚本从img文件夹中获取图像..
/python
|----/img
|----|----icon1.ico
|----|----icon2.ico
|----maint.py
Run Code Online (Sandbox Code Playgroud)
我生成.exe的脚本是
pyinstaller.py --windowed --noconsole --clean --onefile maint.py
Run Code Online (Sandbox Code Playgroud)
问题是只生成.exe文件但是省略了整个文件夹/ img.
问题:为了自动获取.exe文件+/img文件夹,我需要在上一行中添加哪种附加语法?
2013年12月18日更新
我的意思是:执行pyinstaller.py脚本后,所有参数,我必须在/ dist文件夹中看到:.exe文件+/img文件夹,包含我的应用程序的所有图标或位图文件
谢谢
我正在使用ConfigParser来配置我的应用程序,现在我想让它易于分发,同时保持可配置性.
我想我需要一个包含配置文件模板的目录,以及一些生成配置以实际使用这些模板的方法.然后我需要一个存储它的地方,可以在virtualenv,用户主目录等工作.我希望它与普通的Unix软件包的工作方式一样接近,即在其他方面有配置,但在主目录中有覆盖.是否有现成的解决方案,如果没有,我应该在setup.py等中放置什么才能让它像我想要的那样工作?
我在PyPI中创建了一个名为virtdc的包.我做了一些更改并上传了2个不同的版本0.1.0和0.1.1.现在我通过PyPI Web界面删除了0.1.1版本,并尝试使用相同的版本号重新上传.它给我的错误如下
...
Writing virtdc-0.1.2/setup.cfg
Creating tar archive
removing 'virtdc-0.1.2' (and everything under it)
running register
Registering virtdc to http://pypi.python.org/pypi
Server response (200): OK
running upload
Submitting dist/virtdc-0.1.2.tar.gz to http://pypi.python.org/pypi
Upload failed (400): This filename has previously been used, you should use a different version.
Run Code Online (Sandbox Code Playgroud)
并且PyPI不允许包的4个以上版本.所以我们必须删除一些版本并再次上传.
即使在此上传错误之后,也可以使用第一个内容描述.但是下载链接不可用.你可以在这里找到我的包裹
有人可以帮我吗?谢谢
我发现的有关此主题的任何文档都提到构建 deb 包的“唯一”要求是拥有正确的setup.py(和requirements.txt)。例如,在dh-virtualenv 教程、stdeb 文档和Debian 的 python 库风格指南中。
但现在新的(令人惊奇的)工具,如诗,允许开发(并上传到 PyPI)Python 项目,而无需任何setup.py(此文件和其他几个文件,包括requirements.txt全部被替换pyproject.toml)。我相信flit也允许这样做。
我开发了一个由诗歌管理的 python 项目,并想将其打包到 Ubuntu/Debian 中。我想,作为一种解决方法,我仍然可以编写一个从和 一个文件setup.py中获取其值的文件(使用来自 的值手动编写)。pyproject.tomlrequirements.txtpoetry.lock
但是,有没有办法在没有任何文件的情况下做到这一点setup.py?
packaging ×10
python ×6
pypi ×2
abi ×1
c++ ×1
c++11 ×1
deb ×1
directory ×1
distribution ×1
distutils ×1
ear ×1
exe ×1
java ×1
java-ee ×1
maven ×1
maven-2 ×1
namespaces ×1
pyinstaller ×1
python-2.7 ×1
setup.py ×1
setuptools ×1
version ×1
war ×1