我有一个托管所有Django应用程序的目录(C:\My_Projects).我想将此目录添加到我的PYTHONPATH所以我可以直接调用这些应用程序.
我尝试从Windows GUI()添加C:\My_Projects\;到我的Path变量My Computer > Properties > Advanced System Settings > Environment Variables.但它仍然没有读取coltrane模块并生成此错误:
错误:没有名为coltrane的模块
如何PYTHONPATH从Python脚本(或交互式shell)中找出系统变量中列出的目录?
每当我使用时sys.path.append,都会添加新目录.但是,一旦我关闭python,列表将恢复到之前的(默认?)值.如何永久添加目录PYTHONPATH?
我想看看在python中确定当前脚本目录的最佳方法是什么?
我发现,由于调用python代码的方法很多,很难找到一个好的解决方案.
这是一些问题:
__file__如果脚本执行时未定义exec,execfile__module__ 仅在模块中定义用例:
./myfile.pypython myfile.py./somedir/myfile.pypython somedir/myfile.pyexecfile('myfile.py') (来自另一个脚本,可以位于另一个目录中,并且可以有另一个当前目录.我知道没有完美的解决方案,但我正在寻找解决大多数情况的最佳方法.
最常用的方法是os.path.dirname(os.path.abspath(__file__)),如果你从另一个脚本执行脚本,这实际上不起作用exec().
任何使用当前目录的解决方案都将失败,根据调用脚本的方式或者可以在运行的脚本中更改它,可能会有所不同.
好的,我看到很多这些错误.我已经尝试过我所知道的所有事情并且尚未弄清楚这一点.
我正在开发运行python 2.5和Django 1.3的开发服务器.在解压缩tar.gz下载后,使用python setup.py install安装了Django 1.3.
一切运作良好,我很少需要运行,manage.py但我正在尝试使用新的静态文件应用程序,并遇到问题.
python manage.py collectstatic
Traceback (most recent call last):
File "manage.py", line 2, in <module>
from django.core.management import execute_manager
ImportError: No module named core.management
Run Code Online (Sandbox Code Playgroud)
好的,我有PATH问题.
从Django安装我仔细检查我的site-packages目录.
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.5/site-packages
Run Code Online (Sandbox Code Playgroud)
好吧,让我们看看我有什么,echo $ PYTHON_PATH是空的,所以我设置它
export PYTHON_PATH=/usr/lib/python2.5/site-packages/django
Run Code Online (Sandbox Code Playgroud)
仍然没有运气.让我们检查一下sys.path的含义
>>> import sys
>>> print sys.path
['', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/PIL', '/usr/lib/python2.5/site-packages/django', '/var/lib/python-support/python2.5']
Run Code Online (Sandbox Code Playgroud)
路径在那里,我甚至用内容创建了/usr/lib/python2.5/site-packages/django.pth
cat /usr/lib/python2.5/site-packages/django.pth
/usr/lib/python2.5/site-packages/django/
Run Code Online (Sandbox Code Playgroud)
有人知道这里发生了什么吗?
我在路径中找到了一个符号链接,但没有出现新的错误.
python manage.py …Run Code Online (Sandbox Code Playgroud) 我正在Windows上的Wing IDE中运行PyLint.我的项目中有一个子目录(包),在包中我从顶层导入一个模块,即.
__init__.py
myapp.py
one.py
subdir\
__init__.py
two.py
Run Code Online (Sandbox Code Playgroud)
在two.py我内部import one,这在运行时工作正常,因为顶级目录(从中myapp.py运行)位于Python路径中.但是,当我在two.py上运行PyLint时,它给出了一个错误:
F0401: Unable to import 'one'
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我正在尝试从特定目录导入模块.
问题是,如果我使用sys.path.append(mod_directory)附加路径然后打开python解释器,该目录mod_directory将添加到列表sys.path的末尾.如果我PYTHONPATH在打开python解释器之前导出变量,则该目录将添加到列表的开头.在后一种情况下,我可以导入模块,但在前者,我不能.
有人可以解释为什么会这样,并给我一个解决方案mod_directory,在 python脚本中添加到开头?
我想跑:
python somescript.py somecommand
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,我需要PYTHONPATH包含一个特定的目录.我不能只将它添加到我的环境变量中,因为我想要添加的目录会根据我正在运行的项目而更改.有没有办法PYTHONPATH在运行脚本时改变?注意:我甚至没有PYTHONPATH变量,因此在运行此脚本期间,我不需要担心附加到它而是覆盖它.
编辑:基于Ulf Rompe的注释,重要的是你使用"1"代替"0",否则你将破坏sys.path.
我已经做了很长一段时间的python(超过一年),我总是很困惑,为什么人们建议你使用sys.path.append()而不是sys.path.insert().让我来证明一下.
假设我正在开发一个名为PyWorkbooks的模块(安装在我的计算机上),但我同时处理一个包含PyWorkbooks的不同模块(比方说PyJob).当我正在使用PyJob时,我发现PyWorkbooks中的错误正在纠正,所以我想导入一个开发版本.
有两种方法可以同时工作(例如,我可以将PyWorkbooks项目放在PyJob中),但有时我仍然需要使用路径.但是,我不能简单地对sys.path.append()PyWorkbooks所在的文件夹执行操作.为什么?因为python会首先找到我安装的PyWorkbooks!
这就是你必须做一个sys.path.insert(1,path_to_dev_pyworkbooks)的原因
综上所述:
sys.path.append(path_to_dev_pyworkbooks)
import PyWorkbooks # does NOT import dev pyworkbooks, imports installed one
Run Code Online (Sandbox Code Playgroud)
要么:
sys.path.insert(1, path_to_dev_pyworkbooks) # based on comments you should use **1 not 0**
import PyWorkbooks # imports correct file
Run Code Online (Sandbox Code Playgroud)
这对我来说已经引起了一些困扰,如果我们(作为一个社区)开始推荐sys.path.insert(1, path),我真的很喜欢它,好像你是手动插入一条路径我认为可以说这是你想要的路径用!
或者我有什么不对劲?这个问题有时会困扰我,我希望它在公开场合!
另一位开发人员和我不同意是否应该使用PYTHONPATH或sys.path来允许Python在用户(例如,开发)目录中查找Python包.
我们有一个具有典型目录结构的Python项目:
Project
setup.py
package
__init__.py
lib.py
script.py
Run Code Online (Sandbox Code Playgroud)
在script.py中,我们需要这样做import package.lib.当软件包安装在site-packages中时,script.py可以找到package.lib.
但是,当从用户目录工作时,还需要做其他事情.我的解决方案是将我的PYTHONPATH设置为包含"〜/ Project".另一位开发人员希望将这行代码放在script.py的开头:
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
Run Code Online (Sandbox Code Playgroud)
这样Python就可以找到本地副本了package.lib.
我认为这是一个坏主意,因为这行只对开发人员或从本地副本运行的人有用,但我不能说明为什么这是一个坏主意.
我们应该使用PYTOHNPATH,sys.path,还是要么?