我已经开始使用 Python 来自动化我在工作中的重复性任务,并且经常需要将第三方模块的引用集成到我的脚本中。如何将这些文件直接包含在我的脚本中?我知道有多种方法可以在我的 python 安装文件夹 (C:\Python27) 中集中安装这些库。许多第三方模块提供了一个可以自动执行此操作的 EXE 安装程序。但是,我担心这将如何影响我的脚本的可移植性。例如,如果我将我的脚本发送给其他人,我不想也必须向他们发送他们需要下载和安装的所有单独模块的列表。
更新
我对 Visual Studio 中的 C# 项目有更多的经验。在 Visual Studio 项目中,如果我想使用 3rd 方 DLL,我只需将该 DLL 包含在我的解决方案中的 Lib 文件夹中,并从我的项目中引用该 DLL。我不介意将该库加载到 GAC 中,在我看来,这就像安装 python 包的 .NET 等价物。
有没有什么办法可以在我的项目文件夹中包含第 3 方库并使用相对路径引用它们?假设我有以下文件结构。
\My Script.py
\lib\3rdPartyLib\3rdPartyLib.py
Run Code Online (Sandbox Code Playgroud)
我可以从 MyScript.py 导入 3rdPartyLib 吗?
import 3rdPartyLib from \lib\3rdPartyLib\ ??????
Run Code Online (Sandbox Code Playgroud)
为什么我不想这样做?
我正在编写一个具有基于WPF的界面的小实用程序.我还希望能够通过使用命令行参数执行程序来自动执行该实用程序执行的相同任务.将这两个任务合并到一个程序中是一个坏主意吗?我具有我的工具在单独的共享库中执行的实际逻辑和功能.所以如果它们是分开的,我就不会复制很多代码.
我想在我的App.cs文件中做这样的事情
private void Application_Startup(object sender, StartupEventArgs e)
{
if (e.Args.Length > 1)
{
//Go do automated tasks
}
else
{
//open GUI
Window window = new Window();
this.MainWindow = window;
window.Show();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在通过其API编写另一个软件的加载项.API返回的类只能通过本机软件和API进行访问.所以我正在编写自己独立的POCO/DTO对象,这些对象映射到API类.我正在研究一个将在原生文件中读取的功能,并返回这些POCO对象的集合,我可以偷到其他地方.目前我正在使用JSON.NET将这些类序列化为JSON,如果这很重要的话.
例如,我可能有像这样的DTO
public class MyPersonDTO
{
public string Name {get; set;}
public string Age {get; set;}
public string Address {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
..和这样的方法将本地"人"读入我的DTO对象
public static class MyDocReader
{
public static IList<MyPersonDTO> GetPersons(NativeDocument doc)
{
//Code to read Persons from doc and return MyPersonDTOs
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个测试文件的单元测试设置,但是当我在其他文件上运行导出时,我一直遇到意外问题.有时原生对象会有意想不到的值,或者API中存在缺陷,当没有理由时会抛出异常.
目前,当发生"特殊"事件时,我只记录异常,导出失败.但我已经决定我宁愿导出我能做的事情,并在某处记录错误.
最简单的选择是只记录并吞下异常并返回我能做的事情,然而我的调用代码无法知道何时出现问题.
我正在考虑的一个选项是将错误字典作为单独的输出参数返回.密钥将标识无法读取的属性,该值将包含异常/错误的详细信息.
public static class MyDocReader
{
public static IList<MyPersonDTO> persons GetPersons(NativeDocument doc, out IDictionary<string, string> errors)
{
//Code to read persons from doc
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我也在考虑将错误存储在返回对象本身中.这会使我的对象的大小膨胀,但还有一个额外的好处就是直接将错误存储在我的对象中.因此,如果某人的导出产生错误,我不必担心在他们的计算机上追踪正确的日志文件.
public class MyPersonDTO
{
public string …Run Code Online (Sandbox Code Playgroud) 我在http://www.projectlocker.com/上为我的一个项目设立了一个帐户.我是唯一一个正在努力的人,但我认为版本跟踪仍然有用,这是一个很好的学习经验.我用/ trunk /,/ branches /,/ tags /设置了标准文件夹结构.
所以说你在干线上工作,并意识到你真的搞砸了一些东西,但是你想要回到几个版本并从那里继续.我可以更新到以前的版本并开始进行更改,但服务器将不允许我提交,除非我从最后一个版本更新,这也将带来所有不需要的更改.那么我如何回到之前的版本,然后从那里继续工作?我是否以某种方式将旧版本合并到最新版本中?
我正在使用视觉工作室的AnkhSVN插件,所以我很感激和回答解释如何在该客户端中执行此操作,但我确信我可以从更概念性的答案中找出实际的按钮点击.
假设我有一个期望基类型的泛型集合参数的方法,请参阅下面的Test.MethodA(IEnumerable(BaseClass)listA).为什么我传递代码不会构建的派生类型的集合?难道DerivedClass的所有实例都不是BaseClass吗?
我本来可以创建一个新的List(BaseClass)并将其传递给MethodA(IEnumerable(BaseClass)listA).但我认为C#足够聪明,知道DerivedClass的集合具有与BaseClass集合相同的所有属性.
使用List.Cast(T)()方法,因为我已经展示了解决此问题的最佳方法?
abstract class BaseClass
{
public int SomeField;
public abstract string SomeAbstractField
{
get;
}
}
class DerivedClass:BaseClass
{
public override string SomeAbstractField
{
get { return "foo"; }
}
}
class TestClass
{
public void MethodA(IEnumerable<BaseClass> listA)
{
}
public void MethodB()
{
List<DerivedClass> listB = new List<DerivedClass>();
//Error 16 The best overloaded method match for
//TestClass.MethodA(List<BaseClass>)'
//has some invalid arguments
this.MethodA(listB);
//this works
this.MethodA(listB.Cast<BaseClass>()); …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个UserControl CatalogBrowser,它具有一个属性ListedFamilies,可以公开控件中当前列出的Family对象.这是该物业的代码.
public List<Family> ListedFamilies {
get {
List<Family> returnList = new List<Family>();
foreach (Object obj in this.familyObjectListView.Objects) {
returnList.Add((Family)obj);
}
return returnList;
}
set {
this.familyObjectListView.ClearObjects();
this.familyObjectListView.Objects = value;
}
}
Run Code Online (Sandbox Code Playgroud)
现在在我使用此控件的表单中,我一直遇到Visual Studio在Form的设计器文件中添加以下行的问题.
this.catalogBrowserControl1.ListedFamilies = ((System.Collections.Generic.List<SOMLib.Family>)(resources.GetObject("catalogBrowserControl1.ListedFamilies")));
Run Code Online (Sandbox Code Playgroud)
这导致我的程序崩溃,因为我没有(或想要)我的项目中的资源来初始化此集合属性的值.
如何防止Visual Studio自动尝试初始化此属性?
当用户决定打开或保存时,我有一个与XML文件序列化的类.我正在尝试添加典型功能,当他们尝试使用未保存的更改关闭表单时,表单会警告他们并在关闭之前为他们提供保存选项.
我已经HasUnsavedChanges为我的班级添加了一个属性,我的表格会在关闭前检查.但是,我的属性已经从这样的事情发生了变化,这有点令人讨厌.
public string Name
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
对...
private string _Name;
public string Name
{
get
{
return _Name;
}
set
{
this._Name = value;
this.HasUnsavedChanges = true;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来跟踪类实例的更改?例如,是否有一些标准方法可以将类的实例"哈希"为一个值,我可以用它来比较最新版本和保存的版本,而不会破坏类中的每个属性?
我正在用C#.Net编写一个连接到SQL Server数据库的软件应用程序。我的C#项目受SVN版本控制,但我也想在SVN存储库中包含我的数据库架构。我的上一个问题的答案是建议在版本控制中存储脚本以生成数据库。有没有办法从现有数据库自动生成这些脚本?
我是SQL Server的新手,但是我在Management Studio中注意到,可以通过右键单击表并单击“脚本表为”来自动生成用于创建表的SQL命令。是否存在适用于整个数据库的等效命令?
如果我使用try/catch/finally块我应该在哪里以及如何初始化变量?例如,假设我正在尝试使用FileStream.我想捕获创建或使用流时抛出的任何异常.然后,无论是否有任何问题,我都希望确保创建的任何流都已关闭.
所以我会做这样的事情:
System.IO.FileStream fs;
try
{
fs = new System.IO.FileStream("C:\test.txt", System.IO.FileMode.Open);
//do something with the file stream
}
catch (Exception exp)
{
//handle exceptions
}
finally
{
//ERROR: "unassigned local variable fs"
if (fs != null)
{
fs.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这给了我在finally块中说错误unassigned local variable fs.然而,如果我改变的声明fs,以System.IO.FileStream fs = null它的工作原理.
为什么我需要显式设置fs为null?我也试过fs在try块中声明,但后来我The name fs does not exsist in the current context在finally块中得到了错误.
BTW:我知道我可以使用Using块,但我的问题是要了解try/catch/finally块的正确用法.
考虑到我有一个复杂的类结构,其中许多元素继承自其他元素.我可能有一个GetStuff(string stuffName, int count)在接口中定义的方法,它由其他接口继承,然后由抽象类抽象地实现,然后在具体类等中实现显式等等...
我应该如何处理继承的成员,例如GetStuff()用XML注释记录我的代码,这些注释将与Doxygen或Sandcastle等工具一起使用?在每个级别复制和粘贴相同的描述似乎是错误的.我是否应该在界面级别与具体级别级别考虑不同的受众?例如,接口上的GetStuff()文档可能会考虑人们实现接口,而具体级别的文档可能会考虑使用该类的人员?
c# ×6
.net ×3
ankhsvn ×1
casting ×1
collections ×1
doxygen ×1
finally ×1
properties ×1
python ×1
sandcastle ×1
schema ×1
sql-server ×1
ssms ×1
svn ×1
try-catch ×1
types ×1
winforms ×1
wpf ×1