我在Windows上有一个PyCharm 1.2.1.我必须编辑同一个项目的不同分支 - 有点重的分支,因为它们存在于磁盘上的不同文件夹中 - 说它是c:\apps\alpha和c:\apps\beta.对于每个这样的文件夹,应调整PYTHONPATH变量以指向位于项目根文件夹(c:\alpha\vendor,...)内某处的相应供应商库.我设法通过从cmd批处理文件启动PyCharm解决了这个问题,该文件在启动PyCharm之前设置了必要的PYTHONPATH变量值(所以我有PyCharm.cmd内部alpha和PyCharm.cmd内部beta目录).
问题:当我打开PyCharm进行编辑beta文件夹时,import语句从alpha文件夹导入模块!当我python.exe从命令行启动解释器时,一切都按预期工作 - 问题似乎只有PyCharm.
第二个奇怪的调查:print sys.path从PyCharm和外部python.exe解释器执行代码给出不同的结果 - 从PyCharm它不显示我的PYTHONPATH模块.我是Python和PyCharm的新手,但这种行为看起来很奇怪且不一致.
最后我发现PyCharm IDE中的一些设置似乎应该允许我解决这个问题 - File -> Settings -> Python Interpreter.在那里,我找到了两个alpha和beta文件夹的所有路径.无法清除此路径列表,仅禁用某些元素.但即使是禁用也有点愚蠢 - 我应该在每次编辑alpha或beta"解决方案文件夹" 时单独禁用/重新启用它们.
最后一个问题:PyCharm如何编辑单独的项目(文件夹)并强制PyCharm不从错误的位置导入模块?
考虑以下 Python 项目框架:
proj/
??? foo
? ??? __init__.py
??? README.md
??? scripts
??? run.py
Run Code Online (Sandbox Code Playgroud)
在这种情况下foo保存主项目文件,例如
# foo/__init__.py
class Foo():
def run(self):
print('Running...')
Run Code Online (Sandbox Code Playgroud)
并scripts保存需要从 导入文件的辅助脚本,foo然后通过以下方式调用:
[~/proj]$ python scripts/run.py
Run Code Online (Sandbox Code Playgroud)
有两种导入方式Foo都失败了:
from ..foo import Foo则错误为ValueError: attempted relative import beyond top-level packagefrom foo import Foo则错误为ModuleNotFoundError: No module named 'foo'我目前的解决方法是将运行路径附加到sys.path:
import sys
sys.path.append('.')
from foo import Foo
Foo().run()
Run Code Online (Sandbox Code Playgroud)
但这感觉就像一个黑客,必须添加到scripts/.
有没有更好的方法来构建此类项目中的脚本?
我正在尝试使用以下Apache配置为django项目提供服务:
Apache虚拟主机配置:
<VirtualHost *>
ServerName servername
[...]
<Directory "/path/to/project/project">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages
WSGIScriptAlias / /path/to/project/project/wsgi.py
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我也有以下wsgi.py:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings")
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)
我没有问题来提供STATIC文件和MEDIA文件.
我还检查了权限并尝试递归使用755,然后777到我的virtualenv的site-package目录.它没用.
但是当我试图访问我的网站的根目录时,我得到以下内容:
from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django'
Run Code Online (Sandbox Code Playgroud)
我猜这是一个Python路径相关的问题,因为django安装在我的virtualenv中.但我添加了相关的python路径WSGIDaemonProcess的python-path属性,所以我不明白为什么它不起作用.
我也猜测我可以通过使用site模块将相关目录添加到我的wsgi.py中的Python路径中,但我想了解为什么我尝试的Apache配置还不够.我错过了什么?
我最近在我的python路径中添加了一些我不希望使用的东西:
export PYTHONPATH=$PYTHONPATH:/my/path
Run Code Online (Sandbox Code Playgroud)
您可以使用sys.path.remove删除路径中的某些内容,但它不是100%永久性的,就像我使用上面的命令行语句添加它一样.
如何从python路径中永久删除目录?
我在两台服务器上工作,在一台服务器上.pydistutils.cfg看起来像:
install_scripts=~/opt_old/bin
install_data=~/opt_old/share
install_lib=~/usr/lib/python2.6/site-packages
Run Code Online (Sandbox Code Playgroud)
我认为,这会在本地版本的python上使用pip和链接库时出现问题.
在第二台服务器上,该文件不存在,我没有任何问题.
为什么我们需要这个文件,为什么PYTHONPATH不够用?
我安装了本地版本的Python并重命名了.pydistutils.cfg文件.因此,似乎该文件并不重要.
我从上到下搜索过这个网站,但还没有找到一种方法来实际完成我想要的Python3x.这是一个简单的玩具应用程序,所以我想我可以在断言中编写一些简单的测试用例并将其称为一天.它确实会生成报告等,所以我想确保我的代码在更改时不会做任何事情.
我目前的目录结构是:(仅包括相关部分)
project
-model
__init__.py
my_file.py
-test
my_file_test.py
Run Code Online (Sandbox Code Playgroud)
我有一段时间让my_file_test.py导入my_file.py.
就像我说的那样.我从上到下搜索过这个网站,没有解决方案.我的Python版本是在Fedora 17上运行的3.2.3.
以前尝试过的尝试: https: //stackoverflow.com/questions/5078590/dynamic-imports-relative-imports-in-python-3从父文件夹导入模块 任何人都可以解释python的相对导入吗? 如何在python中完成相对导入
几乎在每次尝试中我都会收到错误:
ImportError:没有名为*OR ValueError的模块:在非包中尝试相对导入
这里发生了什么.我已经尝试了SO以及整个互联网上的所有接受的答案.没有做任何想象的事情,但作为一个.NET/Java/Ruby程序员,这被证明是直观性的绝对定义.
编辑:如果重要,我尝试加载我试图在REPL中导入的类,我得到以下内容:
>>> import datafileclass
>>> datafileclass.methods
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
>>> x = datafileclass('sample_data/sample_input.csv')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
Run Code Online (Sandbox Code Playgroud)
如果它很重要......我知道类中的功能可以工作,但是我无法导入它在现在导致无法测试.将来肯定会引发整合问题.(名称已更改,以保护无辜者)在几周内获得库的此迭代所需的功能...任何帮助都可能有用.本来可以在Ruby中完成它,但客户希望Python作为一种学习体验,
我正在使用mod_wsgi在Apache2上部署我的web.py应用程序.
这是我的virt_host文件,
WSGIPythonPath /home/ubuntu/plotwatt/libplotwatt:/home/ubuntu/plotwatt/pwstage/src
<VirtualHost *:20108>
ServerAdmin gslabrails.dev.plotwatt.com
DocumentRoot /var/www
WSGIScriptAlias / /var/www/currentcost/server.py
WSGIDaemonProcess currentcost user=ubuntu group=ubuntu processes=5 threads=3
WSGIProcessGroup currentcost
WSGIApplicationGroup %{GLOBAL}
AddType text/html .py
<Directory /var/www/currentcost/>
Order deny,allow
Allow from all
</Directory>
ErrorLog /var/log/apache2/currentcost_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/currentcost_access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我在WSGIPythonPath中给了我名为redisStage的lib的路径.但是,它似乎不适合我.我做错了配置吗?我不能把WSGIPythonPath指令放在VitualHost指令中.究竟是什么原因?
我的基本问题是我无法--no-site-packages"工作".
我已经阅读了SO上的一些帖子,包括这篇文章.我是一个巨大的Ubuntu noob,并且在python如何与os交互时并没有更好.
其他帖子建议printenv显示PYTHONPATH当我在我的virtualenv时,printenv似乎没有列出"PYTHONPATH",但很有可能我应该寻找的是一个dir我不知道的特殊而不是大写字母.
然而,我注意到,当我在virtualenv中运行python shell时,列出了我的所有全局包.
我不知道这是一个问题virtualenv,.bashrc,Ubuntu或my brain.任何帮助将不胜感激.
如果那里有某种知识渊博的灵魂愿意在一个来回的过程中帮助我,我会非常感激.我没有列出我的任何输出,因为,老实说,除了上述之外,我不完全确定从哪里开始.
编辑以回应评论; UTC时间:2015年11月19日07:41
启动环境:
notanambiturner@computer:~/Dropbox/$$ P/...$ virtualenv --no-site-packages venv
New python executable in venv/bin/python
Installing setuptools, pip, wheel...done.
Run Code Online (Sandbox Code Playgroud)
进入环境:
notanambiturner@computer:~/Dropbox/$$ P/...$ source venv/bin/activate
(venv)notanambiturner@computer:~/Dropbox/$$ P/...$
Run Code Online (Sandbox Code Playgroud)
系统包:
(venv)notanambiturner@computer:~/Dropbox/$$ P/...$ pip freeze
adium-theme-ubuntu==0.3.4
apt-xapian-index==0.46
beautifulsoup4==4.4.1
bleach==1.4.2
blinker==1.3
cffi==1.1.2
characteristic==14.3.0
chardet==2.3.0
colorama==0.3.3
command-not-found==0.3
....
virtualenv==13.1.2
virtualenv-clone==0.2.6
virtualenvwrapper==4.7.1
wheel==0.26.0
whitenoise==1.0.6
xdiagnose==3.8.1
zope.interface==4.1.2
(venv)notanambiturner@computer:~/Dropbox/$$ P/...$
Run Code Online (Sandbox Code Playgroud)
sys.path:
(venv)notanambiturner@computer:~/Dropbox/$$ P/...$ …Run Code Online (Sandbox Code Playgroud) 我使用 Visual Studio Code 已有几年了,我发现它是一个非常好的 IDE。我用 Python 编程的次数比任何其他语言都多。
令我困扰的是我没有抽出时间使用 IDE 的调试器(尽管它是一个功能)。
按调试播放按钮时出错:
Failed to launch the Python Process, please validate the path 'export PATH=$PATH:/Library/Frameworks/Python.framework/Versions/2.7/bin/python'
Run Code Online (Sandbox Code Playgroud)
检查我的 PYTHONPATH:
我的launch.json文件:
"configurations": [
{
"name": "Python",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "/workspace/h5-automation/",
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
}
Run Code Online (Sandbox Code Playgroud)
有什么想法/建议吗?
我在 Windows 10 上使用 Visual Studio 1.39.2。我很高兴你可以在今年 10 月(2019 年)通过 VS Code 本地运行 Jupyter Notebook,但我不明白的一件事是如何设置我PYTHONPATH在启动本地 Jupyter 服务器之前。
我想要的是能够导入位于另一个文件夹中的某个模块(因为该模块是从 C++ 代码编译的)。当我运行一个普通的 Python 调试会话时,我发现我可以通过设置来设置集成终端的环境变量terminal.integrated.env.linux。因此,我PYTHNPATH在正常调试时设置了这个选项。但是在运行 Jupyter Notebook 时,本地 Jupyter 服务器似乎并没有在集成终端中运行(至少从我看到的情况来看不是这样),因此它没有PYTHONPATH设置。
我的问题是,如何PYTHONPATH在 VS Code 中自动设置本地 Jupyter Notebook 服务器?
pythonpath ×10
python ×8
mod-wsgi ×2
python-3.x ×2
apache ×1
apache2 ×1
command-line ×1
django ×1
fedora ×1
import ×1
macos ×1
pip ×1
pycharm ×1
sys ×1
ubuntu ×1
virtualenv ×1