我在 python 中有自己的包,我经常使用它。什么是最优雅或最传统的目录,我应该将我的包放在哪里,以便在不使用 PYTHONPATH 或 sys.path 的情况下导入它?
例如,站点包呢?
/usr/lib/python2.7/site-packages
.
在 python 中复制和粘贴包是否常见?
我在 python 中有自己的包,我经常使用它。什么是最优雅或最传统的目录,我应该将我的包放在哪里,以便在不使用 PYTHONPATH 或 sys.path 的情况下导入它?
例如,站点包呢?
/usr/lib/python2.7/site-packages
.
在 python 中复制和粘贴包是否常见?
我通常将我想要准备导入的东西放在用户站点目录中:
~/.local/lib/pythonX.X/site-packages
要为您的平台显示正确的目录,您可以使用python -m site --user-site
编辑:sys.path
一旦你创建它就会出现:
mkdir -p "`python -m site --user-site`"
因此,如果您像我这样的新手并且您的目录组织得不是很好,您可能想尝试这种方法。
打开你的 python 终端。在我的例子中,导入一个你知道可以工作的模块,比如 numpy,然后执行以下操作。
Import numpy
numpy.__file__
这导致
'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages/numpy/__init__.py'
结果numpy.__file__
是您应该将 python 文件与您的模块一起放置的位置(不包括numpy/__init__.py
),所以对我来说这将是
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages
为此,只需转到您的终端并输入
mv "location of your module" "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages"
现在你应该可以导入你的模块了。
这对我有用(我必须经常创建上传到私有 pip 存储库的 python 包)。详细说明@joran 对这个问题的评论。
python setup.py sdist --format=tar
。理想情况下,创建的包应该在dist
文件夹中。pip install <yourpackage>.tar
pip install --force-reinstall
如果您需要更多地使用库并重新创建 dist 包,您可以使用。
我发现这种方法对我很有用。如果您不需要打包模块以供其他系统使用而不仅仅是您的本地系统,则此方法可能是一种矫枉过正
快乐的黑客。
可以通过添加以下源代码来提取导入文件夹:
import sys
print sys.path
自动符号链接生成示例是:
ln -s \`pip show em | grep "Location"| cut -d " " -f2\` \`python -m site --user-site\`
而不是“em”,您可以使用“刚刚安装但 python 看不到它”的其他包
下面我将按照评论中的要求更详细地解释。
假设您已经使用以下命令安装了 python 模块 em 或 pyserial(示例用于 ubuntu):
sudo pip install pyserial
输出是这样的:
Collecting pyserial
Downloading pyserial-3.3-py2.py3-none-any.whl (189kB)
100% |████████████████████████████████| 194kB 2.3MB/s
Installing collected packages: pyserial
Successfully installed pyserial-3.3
问题将如下 - python 看不到模块 pyserial,为什么?因为安装模块的位置不是 python 正在寻找您的特定用户帐户的位置。
解决方案 - 我们必须创建从 pyserial 到达的路径到你的 python 正在寻找的路径的符号链接。
符号链接创建命令将是:
ln -s <what_to_link> <where_to_link>
我们不是输入确切的位置,而是要求 pip 通过执行命令告诉我们它存储模块的位置:
pip show pyserial | grep "Location"| cut -d " " -f2
我们不是输入确切的位置,而是要求 python 通过执行命令告诉我们它在哪里寻找正在安装的模块:
python -m site --user-site
这两个命令都必须用“`”字符转义(通常在美国键盘的 1 按钮的左侧)
结果将为 ln 提供以下命令,并创建缺少的符号链接:
ln -s /usr/local/lib/python2.7/dist-packages /home/<your_username>/.local/lib/python2.7/site-packages
或类似的东西,取决于你的发行版和 python/pip 默认值。
在我的 Mac 上,我做了一个sudo find / -name "site-packages"
. 这给了我一些路径,比如/Library/Python/2.6/site-packages
,/Library/Python/2.7/site-packages
和/opt/X11/lib/python2.6/site-packages
.
因此,如果我使用的是 v2.7 或 v2.6,我知道将模块放在哪里。
希望能帮助到你。
如果你正在开发一个模块,我建议你遵循这个。
import sys
sys.path.append("/home/mylinux/python-packages")
现在,您保留的任何模块都可以python-packages
通过Python-interpreter
.