我正在尝试为我的领域中的一些流行的Fortran代码进行python包分发.我希望它对setup.py
文件使用最标准的方法.相关的qustion有助于学习如何包装Fortran扩展.
当使用这种方法,我混合时发现一些容易混淆的行为setuptools
和numpy.distutils
.将两者混合是不好的做法吗?截至2015年,似乎最好setuptools
尽可能多地使用.
但是,我想以Fortran
一种兼容的方式构建扩展numpy.
所以我想从中导入numpy.distutils
以获取Extension
和setup
.
我使用以下基本方法:
from setuptools.command.develop import develop
from numpy.distutils.core import Extension, setup
ext_modules=[Extension("my_package.fortran_mod", sources=['src/fortran_mod.f'])]
class MyDevelop(develop):
def run(self):
my_script()
develop.run(self)
setup(
...
ext_modules=ext_modules,
cmdclass={'develop':MyDevelop})
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但我有疑问.
setuptools
和一般是好的做法numpy.distribute
吗?setuptools
先进口吗?numpy
?也许甚至有一些讨论Fortran扩展?https://www.youtube.com/watch?v=R4yB-8tB0J0
http://www.fortran90.org/src/best-practices.html#interfacing-with-python
setuptools文档仅指出:
为了获得最佳性能,最好将Python包安装为zip文件.但是,并非所有软件包都能够以压缩格式运行,因为它们可能希望能够像普通操作系统文件一样访问源代码或数据文件.因此,setuptools可以将您的项目安装为zipfile或目录,其默认选项由项目的zip_safe标志(引用)决定.
实际上,获得的性能优势是什么?是否值得调查我的项目是否是拉链安全的,或者这些好处通常是最小的?
我跑的时候
python setup.py sdist
Run Code Online (Sandbox Code Playgroud)
它在我的./dist目录中创建了一个sdist.这包括我的"dist"文件夹中的zip中的"PROJECT-egg.info"文件,我没有使用它,但它不会伤害我,所以我只是忽略它.
我的问题是,为什么它也建立在我的项目根目录下的"PROJECT-egg.info"文件夹?我可以让它停止创建吗?如果没有,我可以在创建sdist后立即删除它吗?
我正在使用从setuptools导入的'setup'功能.WindowsXP,Python2.7,Setuptools 0.6c11,分发0.6.14.
我的设置配置如下:
{'author': 'Jonathan Hartley',
'author_email': 'tartley@tartley.com',
'classifiers': ['Development Status :: 1 - Planning',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: Microsoft :: Windows',
'Programming Language :: Python :: 2.7'],
'console': [{'script': 'demo.py'}],
'data_files': [('Microsoft.VC90.CRT',
['..\\lib\\Microsoft.VC90.CRT\\Microsoft.VC90.CRT.manifest',
'..\\lib\\Microsoft.VC90.CRT\\msvcr90.dll'])],
'description': 'Utilities for games and OpenGL graphics, built around Pyglet.\n',
'keywords': '',
'license': 'BSD',
'long_description': "blah blah blah",
'name': 'pygpen',
'options': {'py2exe': {'ascii': True,
'bundle_files': 1,
'dist_dir': …
Run Code Online (Sandbox Code Playgroud) 跑步时......
python setup.py sdist register upload
Run Code Online (Sandbox Code Playgroud)
..我得到以下输出:
running register
We need to know who you are, so please choose either:
1. use your existing login,
2. register as a new user,
3. have the server generate a new password for you (and email it to you), or
4. quit
Your selection [default 1]: 1
Username: example
Password: ...
Registering mypackage to http://pypi.python.org/pypi
Server response (200): OK
I can store your PyPI login so future submissions will be faster.
(the login …
Run Code Online (Sandbox Code Playgroud) 我一直在通过"学习Python艰难之路"(第2版)这本书教自己.在练习46中,它告诉我阅读Pip,Distribute和其他一些软件包.
pip的文档很清楚.它允许我安装/卸载和升级包.阅读文档以进行分发,它基本上似乎做同样的事情:
轻松下载,构建,安装,升级和卸载Python包
点子和分发之间有什么区别,它们如何相互关联?
我有一个Python项目,其中我使用了许多非代码文件.目前这些都是图像,但我将来可能会使用其他类型的文件.什么是存储和引用这些文件的好方案?
我考虑在主目录中创建一个文件夹"resources",但是有一个问题; 有些图像是从我项目的子包中使用的.以这种方式存储这些图像会导致耦合,这是一个缺点.
另外,我需要一种方法来访问这些文件,这些文件与我当前的目录无关.
当我运行setup.py中python setup.py test
列出的依赖项时tests_require
,会将其下载到当前目录.我想在site-packages中安装这些依赖项,就像python setup.py install
我运行时列出的依赖项一样requires
.
我无法将项目正确安装package_fiddler
到我的虚拟环境中.
我已经发现,MANIFEST.in
负责将non.py文件放在Package_fiddler-0.0.0.tar.gz
执行时生成的文件中 python setup.py sdist
.
然后我做了:
(virt_envir)$ pip install dist/Package_fiddler-0.0.0.tar.gz
但这并没有安装数据文件或包/home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages
.
我已经试过的设置参数许多配置package_data
,include_package_data
并且data_files
但我似乎每次都使用了错误的配置.
哪种配置package_data
和/或include_package_data
和/或data_files
将正确安装package_fiddler
到我的虚拟环境中?
项目树
.
??? MANIFEST.in
??? package_fiddler
? ??? data
? ? ??? example.html
? ? ??? stylesheets
? ? ??? example.css
? ??? __init__.py
??? README.rst
??? setup.py
Run Code Online (Sandbox Code Playgroud)
setup.py
from setuptools import setup
setup(
name='Package_fiddler',
entry_points={
'console_scripts': ['package_fiddler = package_fiddler:main', ],},
long_description=open('README.rst').read(),
packages=['package_fiddler',]) …
Run Code Online (Sandbox Code Playgroud) TL; DR:有没有办法在运行时挂起setuptool的'develop'来安装一组开发需求python setup.py develop
?
我正在使用setuptools构建我的第一个python包.我将要求指定为:
requirements = [
'click',
'ansible',
'fabric',
'gitpython',
'pyyaml',
'jinja2',
'yapsy'
]
test_requirements = [
'pytest',
'pytest-pep8',
'pytest-cov',
]
setup(
...
install_requires=requirements,
tests_require=test_requirements,
...
)
Run Code Online (Sandbox Code Playgroud)
在开发过程中,我一直在安装软件包(在虚拟环境中):
python setup.py develop
Run Code Online (Sandbox Code Playgroud)
并卸载:
python setup.py develop -u
Run Code Online (Sandbox Code Playgroud)
该软件包使用entry_points来安装一些命令行脚本,因此这为我设置了命令,并允许我在同时测试命令时编辑软件包.
我还有一些用于开发的依赖项... sphinx +扩展和其他一些东西(使用该包不需要的东西).我现在只是在虚拟环境中手动安装它们.我没有看到任何关于如何使用setuptools连接它们的文档(并且没有在googles上找到任何示例).
也许有办法挂钩'setup.py develop'来安装一组额外的要求?另一种方法我还没读过?
我有一个像这样的目录结构:
Package/
setup.py
src/
__init__.py
__main__.py
code.py
Run Code Online (Sandbox Code Playgroud)
我希望能够以很多不同的方式运行代码.
pip install Package
然后python
然后from Package import *
python -m Package
应该做的事情 __main__.py
python __main__.py
这也应该做的事情,__main__.py
但这一次,我们假设你已经下载了源而不是pip installing
.
现在我已经让前两个工作了,但设置很乱:
setup.py:
setup(
name='Package',
packages=['Package'],
package_dir={'Package': 'src'},
...
entry_points={ 'console_scripts': ['Package = src.__main__:main' ] }
Run Code Online (Sandbox Code Playgroud)
__init__.py:
from Package.code import .......
Run Code Online (Sandbox Code Playgroud)
__main__.py:
from . import .......
Run Code Online (Sandbox Code Playgroud)
对我来说更有意义的是两种情况都要写
from code import ........
Run Code Online (Sandbox Code Playgroud)
但这给了我导入错误.
我的方式真的是唯一的方式吗?
最重要的是,我如何支持第三个用例?现在,python __main__.py
抛出
File "__main__.py", line 10, in <module>
from . import code
ImportError: …
Run Code Online (Sandbox Code Playgroud) python ×10
setuptools ×10
distribute ×3
packaging ×3
distutils ×2
pip ×2
setup.py ×2
decoupling ×1
f2py ×1
fortran ×1
numpy ×1
requirements ×1
resources ×1
testing ×1