我在python中有自己的软件包,并且经常使用。我应该在哪里放置软件包,以便在不使用PYTHONPATH或sys.path的情况下将其导入,这是什么最优雅或传统的目录?
例如,网站包呢?
/usr/lib/python2.7/site-packages。
在python中复制并粘贴软件包是否很常见?
我在python中有自己的软件包,并且经常使用。我应该在哪里放置软件包,以便在不使用PYTHONPATH或sys.path的情况下将其导入,这是什么最优雅或传统的目录?
例如,网站包呢?
/usr/lib/python2.7/site-packages。
在python中复制并粘贴软件包是否很常见?
Answers:
我通常将要准备导入的内容放在用户站点目录中:
~/.local/lib/pythonX.X/site-packages
要显示适合您平台的目录,可以使用 python -m site --user-site
编辑:sys.path创建后将显示在其中:
mkdir -p "`python -m site --user-site`"
python -m site --user-site会告诉您应该创建哪个目录。sys.modules除非您真正创建它,否则它不会出现在其中。
mkdir,以mkdir -p创建中间目录。我什至没有~/.local。;-)
因此,如果像我这样的新手和您的目录都没有很好的组织,则可以尝试使用此方法。
打开您的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"
现在,您应该能够导入模块了。
re.__file__对我有用。
这对我有用(我必须经常创建上传到私有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正在寻找的路径创建符号链接。
symlink创建命令为:
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默认值。