- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有公平的机会通过 Python 管理模块,每次都是一个挑战:打包不是人们每天都做的事情,它成为学习的负担,记住的负担,即使你真的这样做了,因为这通常会发生一次。
我想在这里收集有关 Python 中导入、包管理和分发如何工作的最终概述,以便这个问题成为对幕后发生的所有魔法的最终解释。虽然我理解这个问题的广泛层面,但这些东西是如此交织在一起,以至于任何有针对性的答案都无法解决主要问题:了解所有的工作原理,什么是过时的,什么是最新的,对于同一任务来说,什么只是替代品,什么是怪癖。
要引用的关键字列表如下,但这只是其中的一个示例。还有很多,欢迎您添加其他详细信息。
最佳答案
在大多数情况下,这是尝试着眼于包装/分销方面,而不是 import
的机制。 .不幸的是,打包是 Python 提供不止一种方法的地方。我只是想让球滚动,希望其他人能帮助填补我遗漏的内容或指出错误。
首先,这里有一些困惑的术语。包含 __init__.py
的目录文件是一个包。然而,我们在这里讨论的大部分内容都是在 PyPI 上发布的特定版本的软件包、它的镜像之一,或者在特定于供应商的软件包管理系统中,如 Debian 的 Apt、Redhat 的 Yum、Fink、Macports、Homebrew 或 ActiveState 的 pypm。
人们试图将这些已发布的包称为“分发版”,以尝试将“包”仅用作 Python 语言结构。您可以在 PEP-376 中看到其中的一些用法。 PEP-376 .
现在,您的关键字列表与 Python 生态系统的几个不同方面相关:
查找和发布 python 发行版:
setuptools
/分发 distutils
distutils
中有很多功能但大多数人只知道:
from distutils.core import setup
setup(name='Distutils',
version='1.0',
description='Python Distribution Utilities',
author='Greg Ward',
author_email='gward@python.net',
url='http://www.python.org/sigs/distutils-sig/',
packages=['distutils', 'distutils.command'],
)
from distutils.core import setup
的继承者包含在 Python 3 中。 .
distutils
的自定义版本。设置命令
setup.py
里面的文件。
curl -O -G http://pypi.python.org/packages/source/P/Pygments/Pygments-1.4.tar.gz
tar -zxvf Pygments-1.4.tar.gz
cd Pygments-1.4
python setup.py build
sudo python setup.py install
sudo easy_install pygments
or
sudo pip install pygments
__init__.py
的目录。文件和任意数量的附加模块或子包。 Python 还支持在 *.zip 文件中查找和加载源代码,只要它们包含在
PYTHONPATH
中即可。 (
sys.path
)。
easy_install
: 原版egg安装工具,依赖setuptools
pip
:目前最流行的安装python包的方式。类似于 easy_install
但更灵活,并有一些不错的功能,如需求文件,以帮助记录依赖关系和重现部署。 pypm
, apt
, yum
、芬克等 bento
buildout
virtualenv
(和 virtualenvwrapper
)PYTHONPATH
/usr/lib/pythonX.Y/site-packages
.
from distuils import sysconfig
print sysconfig.get_python_lib()
PYTHONPATH
中包含的目录之一中的包。 .
import sys
print sys.path
sys.path.append("/home/myname/lib")
PYTHONPATH
环境变量就像您操作系统上的任何其他环境变量一样,或者您可以使用:
PYTHONPATH
上的目录中读取并将 *.pth 文件的每一行添加到您的 PYTHONPATH
.基本上任何时候您将一个包复制到您的 PYTHONPATH
上的目录中。你可以创建一个 mypackages.pth
.阅读有关 *.pth 文件的更多信息:site module site.py
修改 /home/myname/lib
到带有 *.pth 文件的站点包,您将创建一个 *.pth 文件。文件的名称无关紧要,但您仍然应该选择合理的名称。
myname.pth
:
# myname.pth
/home/myname/lib
sysconfig.get_python_lib()
在您的系统或您的
PYTHONPATH
中的任何其他目录中和
/home/myname/lib
将被添加到路径中。
关于python - 我们能否明确说明 python 打包和导入的工作原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714916/
当我这样做时... import numpy as np ...我可以使用它但是... import pprint as pp ...不能,因为我需要这样做... from pprint import
我第一次尝试将 OpenCV 用于 Python 3。要安装,我只需在终端中输入“pip3 install opencv-python”。当我这样做时,我在 Finder(我在 Mac 上)中看到,在
如果有一个库我将使用至少两种方法,那么以下之间在性能或内存使用方面是否有任何差异? from X import method1, method2 和 import X 最佳答案 有区别,因为在 imp
我正在从 lodash 导入一些函数,我的同事告诉我,单独导入每个函数比将它们作为一个组导入更好。 当前方法: import {fn1, fn2, fn3} from 'lodash'; 首选方法:
之间有什么关系: import WSDL 中的元素 -和- import元素和在 XML Schema ...尤其是 location 之间的关系前者和 schemaLocation 的属性后者的属性
我在从 'theano.configdefaults' 导入 'local_bitwidth' 时遇到问题。并显示以下消息: ImportError
我注意到 React 可以这样导入: import * as React from 'react'; ...或者像这样: import React from 'react'; 第一个导入 react
对于当前的项目,我必须使用矩阵中提供的信息并对其进行数学计算,以及使用 ITK/VTK 函数来显示医疗信息/渲染。基本上我必须以(我猜)50/50 的方式同时使用 matlab 例程和 VTK/ITK
当我看到 pysqlite 的示例时,SQLite 库有两个用例。 from sqlite3 import dbapi2 as sqlite3 和 import sqlite3 为什么有两种方式支持s
我使用 Anaconda Python 发行版:Python 2.7 x64 和 Windows 7 SP1 x64 Ultimate。 当我import matplotlib.pyplot时,我得到
目录 【容器】镜像导出/导入 导出 导入 带标签 不带标签,后期修改 【仓库】镜像导出/导入
我正在寻找一种导入模块的方法,以便我可以从子文件夹 project/v0 和根文件夹 project 运行脚本。/p> 我在 python 3.6 中的文件结构(这就是没有初始化文件的原因) proj
我通常被告知以下是不好的做法。 from module import * 主要原因(或者有人告诉我)是,您可能会导入一些您不想要的东西,并且它可能会隐藏另一个模块中具有类似名称的函数或类。 但是,Py
我为 urllib (python3) 编写了一个小包装器。在if中导入模块是否正确且安全? if self.response_encoding == 'gzip': import gzip
我正在 pimcore 中创建一个新站点。有没有办法导出/导入 pimcore 站点的完整数据,以便我可以导出 xml/csv 格式的 pimcore 数据进行必要的更改,然后将其导入回来? 最佳答案
在 Node JS 中测试以下模块布局,看起来本地导出的定义总是在名称冲突的情况下替换外部导出的定义(参见 B.js 中的 f1)。 A.js export const f1 = 'A' B.js e
我在使用 VBA 代码时遇到了一些问题,该代码应该将 excel 数据导入我的 Access 数据库。当我运行代码时,我收到一个运行时错误“运行时错误 438 对象不支持此属性或方法”。来自我在其他论
我有一个名为 elements 的包,其中包含按钮、trifader、海报等内容。在 Button 类中,我正在执行 from elements import * 这执行正常,当我尝试 print(p
在我长期使用 python 的经验中,我遇到了一个非常奇怪的问题。 提前我想说我想知道为什么会发生这种情况 ,而不是如何更改我的代码或如何修复它,因为我也可以做到。 我正在使用 python2.7.3
我正在更新我的包。但是,我正在为依赖项/导入而苦苦挣扎。我使用了两个冲突的包 - ggplot2和 psych及其功能 alpha当然还有 alpha ggplot2 的对象不同于 alpha psy
我是一名优秀的程序员,十分优秀!