我想导入一些包,具体取决于用户选择的值.
默认为file1.py:
from files import file1
Run Code Online (Sandbox Code Playgroud)
如果用户选择file2,它应该是:
from files import file2
Run Code Online (Sandbox Code Playgroud)
在PHP中,我可以使用变量变量:
$file_name = 'file1';
include($$file_name);
Run Code Online (Sandbox Code Playgroud)
$file_name = 'file2';
include($$file_name);
Run Code Online (Sandbox Code Playgroud)
我怎么能用Python做到这一点?
我开始使用Continuum.io的Python Anaconda发行版来完成scipy工作.
我已经能够启动并运行Anaconda,但我不知道Anaconda是否为它创建的每个新环境创建了一个新的PYTHONPATH环境变量,或者它是否依赖于通用系统. PYTHONPATH
我在文档中找不到任何相关信息.
此外,当我做了一个时printenv,我没有PYTHONPATH在新创建的环境中看到变量 - 虽然我确实找到了一些新的anaconda创建的环境变量.
我能找到的最好的是Anaconda将一些Anaconda目录和新的环境目录添加到PATH变量的头部 - 但这并不一定将新的包与系统环境隔离,但它很接近.
有谁知道这个问题的答案或找到解决这个问题的方法?
我正在尝试创建一个使用设置和Gui模块的用户系统,当gui模块请求使用pickle加载文件时,我不断收到属性错误.这是来自设置模块:
import pickle
import hashlib
class User(object):
def __init__(self, fname, lname, dob, gender):
self.firstname = fname
self.lastname = lname
self._dob = dob
self.gender = gender
self.type = 'General'
self._username = ''
self._hashkey = ''
def Report(self):
print("Full Name: {0} {1}\nDate of Birth: {2}\nGender: {3}\nAccess Level: {4}".format(self.firstname,self.lastname, self._dob, self.gender, self.type))
print(self._username)
def Genusername(self):
self._username = str(str(self._dob)[:2] + self.firstname[:2] + self.lastname[:2])
saveUsers(users)
def Genhashkey(self, password):
encoded = password.encode('utf-8','strict')
return hashlib.sha256(encoded).hexdigest()
def Verifypassword(self, password):
if self._hashkey == self.Genhashkey(password):
return True
else:
return False …Run Code Online (Sandbox Code Playgroud) 我想创建一个Python模块的"库",我可以从几个单独的项目文件夹中访问它.
例如,我希望/ proj1 /和/ proj2 /中的Python脚本可以访问/ lib /.
/lib/help.py
/lib/more_help.py
/proj1/script.py
/proj1/script2.py
/proj2/this_script.py
/proj2/another_script.py
Run Code Online (Sandbox Code Playgroud)
我不希望单个目录包含所有Python脚本,因为这看起来相当混乱.我也绝对不想将相同的/ lib /脚本复制到每个不同的项目中.
在Python中处理这个问题的理想方法是什么?是否附加到Python的路径?或者这更像是一个黑客?这似乎具有使文件不太便携的缺点.或者是关于使用相对路径的问题/答案?或者是其他东西?
我应该补充一点,我对Python 2.x感兴趣而不是3.x,如果重要的话.
在python 3中遇到ImportError问题.我的项目结构如下:
cts_sap_polaris/
|-- etc
| |-- clean_cts_sap_polaris.yaml
| |-- clean_env_variables.tcl
| |-- cts_sap_polaris_ha_combined.yaml
| |-- cts_sap_polaris.yaml
| `-- TCL_TESTBED_CONFIGS
|-- __init__.py
|-- jobs
| |-- __init__.py
| |-- __pycache__
| | `-- run_cts_sap_polaris.cpython-34.pyc
| `-- run_cts_sap_polaris.py
|-- lib
| |-- cli_check.py
| |-- cts_sap_polaris_utils.py
| |-- __init__.py
| |-- router_show_cts_cmd.py
| |-- router_show_etherchannel_cmd.py
| |-- router_show.py
| |-- utils.py
| |-- validate_show_output.py
| `-- wait_for.py
|-- scripts
| |-- cts_sap_polaris_ha_combined.py
| |-- cts_sap_polaris.py
| |-- __init__.py
| `-- __pycache__ …Run Code Online (Sandbox Code Playgroud) 我注意到,当我启动pythonREPL 时:
import sys
print(sys.path)
Run Code Online (Sandbox Code Playgroud)
列表的第一个元素是一个空字符串.这只发生在REPL中.
我正在努力保持数据科学项目组织良好,所以我在我的src目录中创建了一个目录,其中包含utils一个名为的文件helpers.py,其中包含一些将在许多脚本中使用的辅助函数.我应该如何func_name从src/utils/helpers.py一个完全不同的目录中导入文件的最佳实践是什么,例如src/processing/clean_data.py?
我看到了这个问题的答案,我已经实现了一个有效的解决方案,但这感觉很难看:
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))))
Run Code Online (Sandbox Code Playgroud)
我这样做了吗?我是否需要将此添加到每个要导入的脚本中func_name,例如train_model.py?
我当前的项目文件夹结构:
myproject
/notebooks
notebook.ipynb
/src
/processing
clean_data.py
/utils
helpers.py
/models
train_model.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
示例文件:
# clean_data.py
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))))
from src.utils.helpers import func_name
func_name()
# helpers.py
def func_name():
print('I'm a helper function.')
Run Code Online (Sandbox Code Playgroud) 尽管我的脚本在PyCharm中运行,但在cmd提示符下运行脚本时遇到问题。我有这样的文件夹结构:
MyCode # PyCharm project folder
/UsefulFunctions
/Messaging
/Texter.py
/DiscordBot
/DiscordBot.py
Run Code Online (Sandbox Code Playgroud)
在DiscordBot.py中,我有一个导入
from UsefulFunctions.Messaging import Texter
Run Code Online (Sandbox Code Playgroud)
当我从PyCharm运行它而没有问题时,此方法有效。但是,当我尝试从位于该DiscordBot级别的命令提示符运行时,出现以下错误:
ImportError:没有名为“ UsefulFunctions”的模块
因此,我自然而然地认为这意味着该UsefulFunctions文件夹不在我的路径上。因此,我进入了环境变量并将其添加到PATH变量(以及MyCode用于良好测量的文件夹)中。它仍然遇到此错误。我在这里浏览了一些有关导入的文章(主要是从其他文件夹导入文件),他们建议您执行以下操作:
import sys
sys.path.insert(0, '/path/to/application/app/folder')
import file
Run Code Online (Sandbox Code Playgroud)
或将__init__.py文件添加到每个文件夹中,以使它们注册为软件包。我继续将__init__文件添加到尝试从中导入的每个文件夹和子文件夹中,但是仍然无法从命令提示符下运行...我省略了sys.path.insert()解决方案,因为在将其明确添加到PATH变量后,我看不到任何好处。另一种解决方案是添加“。” 在导入之前,因为据推测它只是在搜索python的PATH。我尝试这样做是:
from .UsefulFunctions.Messaging import Texter
Run Code Online (Sandbox Code Playgroud)
ImportError:尝试相对导入,没有已知的父包
这个错误现在也显示在PyCharm上...我不明白为什么我的初始脚本可以在PyCharm上顺利运行的原因,但是从提示符处运行时,同一程序似乎找不到我的导入。有人可以解释运行程序的PyCharm和我的提示之间的区别吗?为什么这不,尽管有工作__init__.py的文件,并有加MyCode,并UsefulFunctions在Windows上我的PATH变量?
我的问题与此有关。我在Jupyter Notebook中使用Python 3.6。我的项目目录是/user/project。在此目录中,我正在构建许多模型,每个模型都有自己的文件夹。但是,有一个通用的functions.py文件,其中包含我要在所有模型中使用的功能。所以,我想保留functions.py在文件中/user/project,但可以从一个调用它.ipynb的文件中/user/project/model1,/user/project/model2等...我怎样才能做到这一点?
我具有以下文件夹结构:
app
__init__.pyutils
__init__.pytransform.pyproducts
__init__.pyfish.py在fish.py中,我transform按以下方式导入:import utils.transform。
当我从Pycharm运行fish.py时,它运行得很好。但是,当我从终端运行fish.py时,出现了error ModuleNotFoundError: No module named 'utils'。
我在终端中使用的命令:来自app文件夹python products/fish.py。
我已经研究了这里建议的解决方案:从不同的文件夹导入文件,将应用程序文件夹的路径添加到sys.path帮助中。但是我想知道是否还有其他方法可以使它工作而无需向中添加两行代码fish.py。这是因为我在/ products目录中有很多脚本,并且不想在其中每个脚本中添加两行代码。
我研究了一些开源项目,并且看到了很多示例,这些示例是从并行文件夹中导入模块而不向sys.path中添加任何内容的,例如:https : //github.com/jakubroztocil/httpie/blob/master/httpie/plugins /builtin.py#L5
如何以相同的方式使其适用于我的项目?