我在python中拥有自己的包,而且我经常使用它。什么是最优雅或传统的目录,我应该把我的包,所以它将被导入而不用PYTHONPATH或sys.path?
例如,网站包怎么样?
/usr/lib/python2.7/site-packages
。
在python中复制并粘贴包是否常见?
答案 0 :(得分:44)
我通常把我想要准备好的东西放在用户站点目录中:
~/.local/lib/pythonX.X/site-packages
要显示适用于您平台的正确目录,可以使用python -m site --user-site
编辑:创建后,它会显示在sys.path
中:
mkdir -p "`python -m site --user-site`"
答案 1 :(得分:18)
因此,如果您这样的新手和您的目录组织得不是很好,您可能想尝试这种方法。
打开你的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"
现在您应该可以导入模块了。
答案 2 :(得分:5)
这对我有用(我必须经常创建上传到私有pip存储库的python包)。详细阐述@joran对这个问题的评论。
python setup.py sdist --format=tar
。理想情况下,创建的包应位于dist
文件夹中。pip install <yourpackage>.tar
如果您需要更多地使用库并重新创建dist包,则可以使用pip install --force-reinstall
。
我发现这种方法对我很有用。如果您不需要将模块打包用于其他系统而不仅仅是本地系统,则此方法可能过度
快乐的黑客攻击。
答案 3 :(得分:1)
在我的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,我知道放置模块的位置。
希望它有所帮助。
答案 4 :(得分:1)
示例:
ln -s`pip show em | grep“位置”| cut -d“” - f2``python -m site --user-site`
而不是“em”你可以使用你刚刚安装的其他软件包,但python看不到它“
下面我会在评论中要求更详细地解释。
假设您已使用以下命令安装了python module 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默认值。
答案 5 :(得分:-1)
如果您要开发模块,建议您遵循此步骤。
import sys
sys.path.append("/home/mylinux/python-packages")
现在python-packages
可以导入您保存在Python-interpreter
中的任何模块。