我在C中编写了一个Python扩展,它需要CoreFoundation框架(以及其他内容).这编译好:
gcc -o foo foo.c -framework CoreFoundation -framework Python
Run Code Online (Sandbox Code Playgroud)
("-framework"是一个仅限Apple的gcc扩展,但这没关系因为我正在使用他们的特定框架)
如何告诉setup.py将此标志传递给gcc?
我试过这个,但它似乎不起作用(它编译,但当我尝试运行它时抱怨未定义的符号):
from distutils.core import setup, Extension
setup(name='foo',
version='1.0',
author='Me',
ext_modules=[Extension('foo',
['foo.c'],
extra_compile_args=['-framework CoreFoundation'])])
Run Code Online (Sandbox Code Playgroud)
编辑:
这似乎有效:
from distutils.core import setup, Extension
setup(name='foo',
version='1.0',
author='Me',
ext_modules=[Extension('foo',
['foo.c'],
extra_link_args=['-framework', 'CoreFoundation'])])
Run Code Online (Sandbox Code Playgroud) 我一直在使用virtualenv + pip进行python开发.我不确定发生了什么,但每当我尝试运行命令行工具或导入库时,我都会收到以下错误消息:
Traceback (most recent call last):
File "/Users/kyle/.virtualenvs/fj/bin/pip", line 4, in <module>
import pkg_resources
File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 698, in <module>
the platform/python version defined at initialization are added.
File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 701, in Environment
search_path = sys.path
File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 96, in get_supported_platform
'Environment', 'WorkingSet', 'ResourceManager',
File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 221, in get_build_platform
if provDarwin:
File "/Users/kyle/.virtualenvs/fj/lib/python2.6/distutils/__init__.py", line 14, in <module>
exec open(os.path.join(distutils_path, '__init__.py')).read()
IOError: [Errno 2] No such file or directory: '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/__init__.py'
Run Code Online (Sandbox Code Playgroud)
从我可以破译的内容来看,Python试图distutils_path在Mac OSX系统版本中找到Python,而不是像我应该的那样的virtualenv版本. …
如何在setup.py脚本中为Python扩展模块指定头文件?使用源文件列出如下不起作用.但我无法弄清楚在哪里列出它们.
from distutils.core import setup, Extension
from glob import glob
setup(
name = "Foo",
version = "0.1.0",
ext_modules = [Extension('Foo', glob('Foo/*.cpp') + glob('Foo/*.h'))]
)
Run Code Online (Sandbox Code Playgroud) 我可以下载并安装一封来自PyPI Python模块严格意义上的脚本中,不使用外壳在所有?
我使用非标准的Python环境,Autodesk Maya的Python解释器.这不是"easy_install",并且没有"shell",只有主Maya可执行文件调用的python脚本解释器.将ez_setup.py的内容复制并粘贴到脚本编辑器窗口并正确运行它会将easy_install安装到Maya的目录中,但脚本会错误地将Python解释器记录为"... maya.exe"而不是"... mayapy.exe "此外,使用easy_install需要一个shell.
目标是提供一个Python脚本,例如,将NumPy安装到Maya Python系统中.这可以通过将egg放入site-packages目录来完成,但这需要手动用户干预.最终用户在Maya环境之外必须做的任何事情基本上是不可触及的,尤其是弄乱文件系统.但是通过脚本搞乱文件系统?没关系.
有没有比ez_setup.py更优雅的东西+编辑生成的easy_install ... py的+子进程调用?我觉得这是一个基本功能.我通过pip在线查看程序模块安装的文档...但是需要首先安装pip!
在脚本范围内严格安装模块的最优雅方法是什么?
我想在某些情况下自动化上传过程错误python setup.py upload失败,因为pypi服务器已经上传了保存版本.
如何从脚本强制上传(我知道我可以使用Web界面删除旧版本).
我发现了一个带有MANIFEST.in文件的Python项目.我可以猜到它的大部分含义,但我不清楚这条线的含义:
graft tools
Run Code Online (Sandbox Code Playgroud) 我已经安装了scikit-fuzzy,但是当我import skfuzzy as fuzz收到错误时
ModuleNotFoundError: No module named 'distutils'"
Run Code Online (Sandbox Code Playgroud)
我已经尝试过pip uninstall distutils并得到了这个输出
Note: you may need to restart the kernel to use updated packages.
WARNING: Skipping distutils as it is not installed.
Run Code Online (Sandbox Code Playgroud)
然后我尝试再次安装pip install distutils
Note: you may need to restart the kernel to use updated packages.
ERROR: Could not find a version that satisfies the requirement distutils (from versions: none)
ERROR: No matching distribution found for distutils
Run Code Online (Sandbox Code Playgroud)
由于我使用Python 3.12,我也尝试使用pip3 …
我有一个python脚本myscript.py,我希望使用distutils安装:
from distutils.core import setup
setup(..., scripts=['myscript.py'], ...)
Run Code Online (Sandbox Code Playgroud)
如果我可以使用myscript而不是键入来调用已安装的脚本,我更喜欢myscript.py.这可以通过将文件重命名为just来实现,myscript但许多编辑器等将不再理解它是Python文件.
有没有办法保留旧名称,myscript.py但仍然安装文件myscript?
我有一个setup.py看起来像这样:
from setuptools import setup
from subprocess import call
from setuptools.command.install import install
class MyInstall(install):
def run(self):
call(["pip install -r requirements.txt --no-clean"], shell=True)
install.run(self)
setup(
author='Attila Zseder',
version='0.1',
name='entity_extractor',
packages=['...'],
install_requires=['DAWG', 'mrjob', 'cchardet'],
package_dir={'': 'modules'},
scripts=['...'],
cmdclass={'install': MyInstall},
)
Run Code Online (Sandbox Code Playgroud)
我需要MyInstall因为我想从github安装一些库而我不想使用dependency_links选项,因为它不鼓励(例如这里),所以我可以用requirements.txt来做这件事.
当我安装这个软件包时pip,一切都运行正常,但由于某些原因,我必须以一种纯粹的方式解决这个问题python setup.py install.它没有.
当覆盖cmdclass在setup()与我自己的类,install_requires似乎被忽略.一旦我注释掉那一行,就会安装这些软件包.
我知道例如在distutils中不支持install_requires(如果我记得很清楚),但它在setuptools中.然后cmdclass就不会有任何影响install_requires.
我用Google搜索了这个问题几个小时,在stackoverflow上找到了很多相关的答案,但不是针对这个特殊的问题.
把所有需要的包放到requirements.txt,一切都运行正常,但我想了解为什么会这样.谢谢!
setuptools.setup() 函数接受的关键字参数的完整列表是什么?(如果可能,请说明每个参数的含义。)
我已经浏览了整个网络,我不敢相信这没有记录。
我找到了这些文件:
但即使我将这些结合起来,它们也缺少其他参数,例如
...我不知道还有多少论据丢失了。
setuptools.setup() 函数接受的关键字参数的完整列表是什么?
distutils ×10
python ×9
setuptools ×3
easy-install ×2
pip ×2
distutils2 ×1
macos ×1
manifest ×1
maya ×1
pypi ×1
python-3.12 ×1
python-c-api ×1
setup.py ×1
skfuzzy ×1
virtualenv ×1