相关疑难解决方法(0)

使用distutils/setuptools在安装后执行Python脚本

我正在尝试向Python distutils添加安装后任务,如如何使用简单的安装后脚本扩展distutils中所述?.该任务应该在已安装的lib目录中执行Python脚本.此脚本生成安装包所需的其他Python模块.

我的第一次尝试如下:

from distutils.core import setup
from distutils.command.install import install

class post_install(install):
    def run(self):
        install.run(self)
        from subprocess import call
        call(['python', 'scriptname.py'],
             cwd=self.install_lib + 'packagename')

setup(
 ...
 cmdclass={'install': post_install},
)
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但据我所知,有两个不足之处:

  1. 如果用户使用的Python解释器不是拾取者PATH,则安装后脚本将使用不同的解释器执行,这可能会导致问题.
  2. 它对于干运行等是不安全的,我可以通过将其包装在一个函数中并使用它来解决它distutils.cmd.Command.execute.

我怎样才能改进我的解决方案?这样做有推荐的方法/最佳做法吗?如果可能的话,我想避免引入另一个依赖.

python install distutils setuptools post-install

29
推荐指数
1
解决办法
1万
查看次数

Python包装状态:Buildout,Distribute,Distutils,EasyInstall等

上次我不得不担心安装Python软件包是两年前与Enthought,NumPyMayaVi2合作的.这种经历给了我挥之不去的噩梦,这些噩梦与在非标准位置($HOME/usr/local2.6/例如)中安装和更新Python包的古怪行为有关.

无论如何,我的工作让我回到安装各种Python包.该Cheeseshop上教程中提到的distutils和EasyInstall除了扩建!我很难找到一个比较这些(和其他)PyPi安装工具的地方,所以我希望进入StackOverflow社区: 每个安装工具的优点和缺点是什么?

python distutils buildout easy-install distribute

24
推荐指数
3
解决办法
3092
查看次数

重写cmdclass时忽略python setuptools install_requires

我有一个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.它没有.

当覆盖cmdclasssetup()与我自己的类,install_requires似乎被忽略.一旦我注释掉那一行,就会安装这些软件包.

我知道例如在distutils中不支持install_requires(如果我记得很清楚),但它在setuptools中.然后cmdclass就不会有任何影响install_requires.

我用Google搜索了这个问题几个小时,在stackoverflow上找到了很多相关的答案,但不是针对这个特殊的问题.

把所有需要的包放到requirements.txt,一切都运行正常,但我想了解为什么会这样.谢谢!

python distutils setuptools install-requires

20
推荐指数
2
解决办法
4474
查看次数

如何进行Python包管理?

来自Node.js + npm背景,尝试理解与Python包管理相关的所有事情真的很噩梦.经过几个小时的研究,我偶然发现了所有这些关键词:

  • easy_install的
  • 的virtualenv
  • 果仁
  • setuptools的
  • 的distutils
  • 的PyPI
  • 站点包

有人可以帮我解读这些条款并将它们置于历史背景中吗?例如,"distutils是第一个包管理器,但它被Y取代,因为Z".

我非常喜欢Python(语言),但是对于过去几年一直在使用惊人的npm的人来说,包管理似乎是一个真正的噩梦.

python pip virtualenv

20
推荐指数
1
解决办法
1458
查看次数

Python部署的最佳实践 - 多个版本,标准安装位置,打包工具等

关于这个问题的不同方面的许多帖子,但我没有看到一个将所有这些结合在一起的帖子.

首先是一个主观陈述:当我们移出解释器并开始解决部署问题时,我们在使用Python语言时遇到的简单性似乎就像是分段.如何在同一台机器上拥有多个版本的Python?应该在哪里安装包裹?Disutils vs. setuptools vs. pip等.在部署方面,似乎Python的Zen被滥用得非常糟糕.我对Windows上的"DLL地狱"体验感到怪异的回声.

专家们是否同意这些问题的某种程度的最佳实践?

你在同一台机器上运行多个版本的Python吗?你如何仍然相信,他们可以共存 - 和较新的版本不会破坏依赖于早期版本的其他进程的假设(由操作系统供应商提供的脚本,例如)?这样安全吗?virtualenv足够吗?

在本地文件系统上,Python环境的不同组件(包括第三方软件包)的位置的最佳选择是什么?对于可以依赖的许多不同版本的Unixy和Windows操作系统,位置之间是否存在严格或粗略的对应关系?

沼泽中最阴暗的角落 - 你使用什么安装工具(setuptools,distutils,pip等),并且它们适合您的选择:文件位置,Python虚拟环境,Python路径等.

这些听起来像是难题.我希望经验丰富的Pythonistas可能已经为这些挑战定义了一种规范的方法(或两种方法).任何"挂在一起"作为一个可以放心使用的系统的方法(感觉不像是单独的,不相关的工具)将是非常有帮助的.

python distutils pip virtualenv multiple-versions

19
推荐指数
2
解决办法
4821
查看次数

python模块导入 - 相对路径问题

我在python 2.7中开发自己的模块.它位于~/Development/.../myModule而不是/usr/lib/python2.7/dist-packages/usr/lib/python2.7/site-packages.内部结构是:

/project-root-dir
  /server
    __init__.py
    service.py
    http.py
  /client
    __init__.py
    client.py
Run Code Online (Sandbox Code Playgroud)

client/client.py包括PyCachedClient课程.我有进口问题:

project-root-dir$ python
Python 2.7.2+ (default, Jul 20 2012, 22:12:53) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from server import http
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "server/http.py", line 9, in <module>
    from client import PyCachedClient
ImportError: cannot import name PyCachedClient
Run Code Online (Sandbox Code Playgroud)

我没有将PythonPath设置为包含my project-root-dir,因此当server.http尝试包含client.PyCachedClient时,它会尝试从相对路径加载它并失败.我的问题是 - 如何以良好的pythonic方式设置所有路径/设置?我知道export PYTHONPATH=... …

python module

17
推荐指数
1
解决办法
4288
查看次数

获取"data_files"根目录的任何python函数?

对于使用"setup.py"构建安装包的开发人员而言,这应该是一个非常常见的问题,应该先问过它,但我无法在任何地方找到合适的答案.

在setup.py中

from distutils.core import setup
setup(
    ....,
    ....,
    data_files=[('MyApp/CBV', ['myapp/data/CBV/training.cbv', 'myapp/data/CBV/test.cbv'])],
    ....,
    ....,
    )
Run Code Online (Sandbox Code Playgroud)

sudo python setup.py安装的结果

running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts
changing mode of /usr/local/bin/MyApp_trainer to 755
changing mode of /usr/local/bin/MyApp_reference_updater to 755
changing mode of /usr/local/bin/MyApp_predictor to 755
changing mode of /usr/local/bin/reference_updater to 755
running install_data
creating /usr/local/MyApp/CBV
copying MyApp/data/CBV/training.cbv -> /usr/local/MyApp/CBV
copying MyApp/data/CBV/test.cbv -> /usr/local/MyApp/CBV
running install_egg_info
Removing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Writing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Run Code Online (Sandbox Code Playgroud)

从使用上述结果的观察,"/ usr/local"是"data_files"根目录.除了硬编码,是否有任何Python函数可以给我这个"data_files"根目录?

python setup.py

16
推荐指数
1
解决办法
7349
查看次数

在Ubuntu上安装python模块

我需要在Ubuntu Linux 12.04上安装python的一些模块.我想要pygame和livewires,但我不知道如何安装它们.

我有livewires的py文件,它已被特别编辑(从我正在阅读的书中)我想安装它但我不知道如何,我也想安装pygame.

python linux ubuntu package python-3.x

15
推荐指数
3
解决办法
8万
查看次数

Python包安装在Windows中

我最近开始学习Python,我对如何分发和安装软件包感到困惑.

我知道安装软件包的官方方式是distutils:你下载源tarball,解压缩它,然后运行:python setup.py install,然后模块将自动安装自己

我也知道带有帮助脚本的setuptoolseasy_install.它使用鸡蛋进行分发,根据我的理解,它构建在distutils之上并执行与上面相同的操作,并且它处理所需的任何依赖项,所有依赖于PyPi

然后还有pip,我仍然不确定它与其他人有什么不同.

最后,当我在Windows机器上时,许多软件包还通过Windows安装程序提供二进制构建,特别是那些需要编译C/Fortran代码的软件包,否则这将是在Windows上手动编译的噩梦(假设您有MSVC)或MinGW/Cygwin开发环境,所有必要的库设置..尽管如此,尝试自己建立numpy或scipy,你会明白!)

所以有人可以帮助我理解所有这些,并解释每种方法的差异,利弊.我想知道每个人如何跟踪包(Windows注册表,配置文件,...).特别是,您将如何管理所有第三方库(能够列出已安装的软件包,禁用/卸载等).

python distutils packages pip setuptools

14
推荐指数
1
解决办法
2779
查看次数

setup.py的替代方案

setup.py 有一个重大问题:

  • 它无法安全解析

这导致了很多问题 - 无法安全地分析,从PyPI读取100k +包需要太多开销,源包无法自动转换为Debian和Fedora等本机系统格式.

那么,是否有任何替代方法可以使用静态数据格式(不是setup.py)来打包Python内容来描述和包装其内容?因此,a source package只是源检出的.zip文件,不需要魔术和构建步骤.

python pypi setup.py

8
推荐指数
1
解决办法
810
查看次数